Hibernate标准加入

时间:2014-07-14 11:10:19

标签: java hibernate criteria

我有两个课程,如:

@Entity
public class Customer{
    @Id
    private String id;
    private String name;
    @Column(nullable=false, unique=true)
    private String refId;
}


@Entity
public class Account{
    @Id
    private String id;
    @Column(nullable=false, unique=true)
    private String accountNr;
    @Column(nullable=false)
    private String accountType;
    @Column(nullable=false, unique=true)
    private String refId;
}

我想在refId上加入这两个类,以便在Account字段上进行排序,例如:

select c.* from Customer as c inner join Account as a on a.refId=c.refId orderBy a.accountType

有没有办法在条件

中进行此类查询

2 个答案:

答案 0 :(得分:1)

您应该使用表格之间的关系,例如@OneToOne@ManyToOne
之后,写HQL会很容易 您可以阅读更多相关信息here

答案 1 :(得分:1)

Hibernate通常不允许你按需提供"像在SQL查询中一样通过Criteria加入。 However, this appears to indeed be possible using a work-around of having multiple Criterias.

但是,如果您按照Alex的建议在Entity课程中映射关联,则可以创建更简单的Criteria,因为Customer会有{ {1}}对象已经"映射"它:

account

要执行关联,您可以在Criteria criteria = session.createCriteria(Customer.class) .createCriteria("account") .addOrder(Order.asc("accountType")); 类中将Entity字段替换为相关对象。因此,在refId类中,您可以拥有Customer对象关联,如此(反之亦然):

Account

假设这是一对一的关系。 You don't need to reference the primary key in one-to-one mapping