Petr Kolesa napsal(a):
Nakonec jsem v tom zbytecne hledal slozitosti:
@Entity
class Concept {
@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE},
mappedBy="children")
private List<Concept> parents;
@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
private List<Concept> children;
}
Mapped by je to same co inverse="false" (mozna true, vzdy se divam do
manualu).
Problem je v tom, ze mi porad nejak nejde zkrotit Hibernate, i presto
ze mi nedela problemy uvazovat v jazyce objektu ani v jazyce relacni
databaze.
Na to pomuze praxe a taky cteni zdrojaku Hibernatu...
Napr: Jak by mel vypadat HQL dotaz, ktery by mi vratil rodice uzlu,
kdyz mych mel takovyhle mapovani:
@Entity
class Concept {
@Transient
private List<Concept> parents; @ManyToMany(cascade={...})
private List<Concept> children;
}
select * from
Concept c left join concept_concept cc
on cc.parent_id = c.id
where
cc.child_id = :hledaneID;
Jak totez zformulovat v HQL?
Uplne stejne (left join IMHO neni nutny):
concept from Concept concept join concept.children as children where
children=:hledaneChildren
Co se prelozi do SQL jako: select ... from Concept concept left join
concept_concept cc
on cc.parent_id = concept .id left join Concept children on
children .id=cc_child_id where children.id=?