如何使用hibernate标准连接多个表,其中实体关系不是直接的?

我有三个实体。 那些是:

@Entity public class Organization { @Id private long id; @Column private String name; } 
 @Entity public class Book { @Id private Long id; @Column private String name; @ManyToOne private Organization organization; } 
 @Entity public class Account { @Id private Long id; @Column private String name; @ManyToOne private Book book; } 

在这三个实体中,我想执行以下sql:

 SELECT acc.name, acc.id FROM account acc JOIN book b on acc.book_id = b.id JOIN organization org on b.organization_id = org.id WHERE org.name = 'XYZ' 

在这种情况下, Account实体与Organization实体没有直接关系。 Account实体通过Book有关系。 如何使用hibernate条件动态查询来实现这一点?

你可以这样做:

 Criteria accountCriteria = getCurrentSession().createCriteria(Account.class,"acc"); Criteria bookCriteria = accountCriteria .createCriteria("book","b"); Criteria orgCriteria = bookCriteria.createCriteria("organization","org"); orgCriteria.add(Restrictions.eq("name", "XYZ")); ProjectionList properties = Projections.projectionList(); properties.add(Projections.property("name")); properties.add(Projections.property("id")); accountCriteria.setProjection(properties); accountCriteria.list(); 

其他方式

 public List getAccountListByOrgName(String name){ return sessionFactory.getCurrentSession().createCriteria(Account.class) .createAlias("book", "book") .createAlias("book.organization", "organization") .add(Restrictions.eq("organization.name", name)) .list(); }