2015-07-17 7 views
0

У меня есть таблица, которая может представлять дерево.Hibernate Query on self join table failed

key  number(10) NOT NULL, 
parentkey number(10) NOT NULL, 
name  varchar(20), 

И класс, представляющий его.

@Entity 
@Table(name = "example") 
public class Example 
{ 
    @Id 
    @Column(name = "KEY") 
    private long key; 

    @Column(name = "NAME") 
    private String name; 

    @ManyToOne 
    @JoinColumn(name="parentkey",referencedColumnName="key") 
    private Example parent; 

    public Example() 
    { 
     parent = this; 
    } 

При попытке запроса на экземпляре и его родителей я получаю

org.hibernate.QueryException: не удалось разрешить свойство: parent.name из: com.example

Вот как я построить запрос критерии:

 Example dsd = ...; 
     ... 
     Criteria crit = session.createCriteria(Example.class); 
     crit.add(Restrictions.eq("name", dsd.getName()));  

     crit.add(Restrictions.eq("parent.name", dsd.getParent().getName())); 

     return crit.list(); 

Я мог бы сделать это в сыром SQL, но я чюо uld скорее не. Что я делаю не так?

ответ

0

Вы можете создать alias:

Criteria crit = session.createCriteria(Example.class); 
crit.add(Restrictions.eq("name", dsd.getName()));  
crit.createAlias("parent", "parent"); 
crit.add(Restrictions.eq("parent.name", dsd.getParent().getName()));