2010-08-02 73 views
1

我的休眠实体如下:然后Hibernate的标准API多次join

@Entity 
@Table(name = "EditLocks") 
public class EditLock extends AuditableEntity { 

    /** The document that is checked out. */ 
    @OneToOne 
    @JoinColumn(name = "documentId", nullable = false) 
    private Document document; 

文件看起来是这样的:

public class Document extends AuditableEntity { 
    /** Type of the document. */ 
    @ManyToOne 
    @JoinColumn(name = "documentTypeId", nullable = false) 
    private DocumentType documentType; 

基本上我想写的查询是:

Select * from EditLocks el, Document docs, DocumentTypes dt where el.documentId = docs.id and docs.documentTypeId = dt.id and dt.id = 'xysz'; 

如何用hibernate标准api来做到这一点?

回答

8

应该这样做:

Criteria criteria = getSession().createCriteria(EditLock.class); 
criteria.createAlias("document", "document"); 
criteria.createAlias("document.documentType", "documentType"); 
criteria.add(Restrictions.eq("documenttype.id", "xyz"); 

您需要添加别名,达到具有其上您要查询的属性的对象。

+0

是的,我想我可能已经失踪那只是没有办法来测试它。谢谢! – 2010-08-03 01:20:06

0

因此,它看起来像你只是想获得具有DocumentType id ='xyz'的文档的EditLocks。我假设文档和DocumentType有标准的Hibernate映射:

Criteria crit = getSession().createCriteria(EditLock.class); 
crit.add(Restrictions.eq("document.documenttype.id", "xyz"); 

休眠应该能够找出连接你我的想法。

+1

这并不工作:org.hibernate.QueryException: 致无法解析属性:的document.documentType.id:com.docfinity.document.entity.EditLock – Khandelwal 2010-08-02 16:45:14