Łukasz
Kukawski
Deweloper aplikacji
internetowych
Temat: Hibernate, Java(Spring), ManyToMany i problem z...
Mam problem, mam pytanieMam trzy encje:
1)Artykuł
2)Sklep
3)Strona
Relację między encjami:
Jeden artykuł może mieć wiele sklepów, jeden sklep może mieć wiele artykułów.
Jeden artykuł może mieć jedną stronę.
Jeden sklep może mieć jedną stronę.
Jak to wygląda w kodzie:
Artykuł:
@OneToOne(fetch=FetchType.LAZY)
@Cascade({CascadeType.DELETE, CascadeType.DELETE_ORPHAN})
@JoinColumn(name = "strona_id")
private Strona strona;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name="sklep_artykul",
joinColumns=@JoinColumn(name="artykul_id"),
inverseJoinColumns=@JoinColumn(name="sklep_id")
)
private Set<Sklep> sklepy = new HashSet<Sklep>();
Sklep:
@OneToOne( fetch=FetchType.LAZY)
@Cascade({CascadeType.DELETE, CascadeType.DELETE_ORPHAN})
@JoinColumn(name = "strona_id")
private Strona strona;
@ManyToMany(mappedBy="sklepy", fetch=FetchType.LAZY)
private Set<Artykul> artykuly = new HashSet<Artykul>();
Podczas dodawania artykułu udostępniam możliwość podpięcia kilku sklepów poprzez listę select multiple.
form:select path="sklepy" multiple
items="${sklepy}" itemLabel="nazwa" itemValue="id"
W kontrolerze który wywołuję widok z dodaniem artykułu dodaję initBInder aby odwzorować Stringa z formularza na listę sklepów:
@InitBinder
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) {
binder.registerCustomEditor(Set.class, "sklepy",
new CustomCollectionEditor(Set.class) {
@Override
protected Object convertElement(Object element) {
if (element != null) {
return sklepService.pobierzSklep(Integer
.parseInt(element.toString()));
}
return null;
}
});
Wszystko działa poprawnie po za jedną rzeczą.
Problem polega na tym że gdy generuję formularz z listą sklepów do wybrania, to hibernate generuję dodatkowe zbędne zapytania dla każdego sklepu, zaciągając powiązaną stronę.
W tej sytuacji potrzebuję tylko nazwę oraz id sklepu, nic więcej nie potrzebuję.
Gdy wygeneruję Select list pomijając atrybut path="sklepy" dodatkowe zapytania się nie generują.
Gdzie jest problem?Ten post został edytowany przez Autora dnia 10.03.14 o godzinie 15:43