Hibernate Criteria API несколько соединений - PullRequest
1 голос
/ 02 августа 2010

Мои спящие сущности выглядят следующим образом:

@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';

Как мне сделать это с помощью API Hibernate?

Ответы [ 2 ]

8 голосов
/ 03 августа 2010

Это должно сделать это:

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

Вам нужно добавить псевдонимы, чтобы достичь объекта, обладающего свойством, к которому вы хотите запросить.

0 голосов
/ 02 августа 2010

Похоже, вы просто пытаетесь получить EditLocks, у которых есть Документы с DocumentType id = 'xyz'. Я предполагаю, что Document и DocumentType имеют стандартные отображения Hibernate:

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

Hibernate должен быть в состоянии выяснить соединения для вас, я думаю.

...