hibernate标准一个域、多个域和列表
我有三个实体ClassA、ClassB和ClassChibernate标准一个域、多个域和列表,hibernate,criteria,Hibernate,Criteria,我有三个实体ClassA、ClassB和ClassC ClassA { ... @Id @GeneratedValue @Column(name = "a_id") private long id; ... @OneToMany(cascade={CascadeType.ALL}) @JoinColumn(name="a_id") private List<ClassB> bbb; ... } ClassB { ... @ManyToOne private
ClassA {
...
@Id
@GeneratedValue
@Column(name = "a_id")
private long id;
...
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name="a_id")
private List<ClassB> bbb;
...
}
ClassB {
...
@ManyToOne
private ClassC ccc;
...
}
ClassC {
...
private String name;
...
}
我将非常感谢您的帮助。您需要使用别名来嵌套限制:
criteria.createAlias("bbb", "bbb", CriteriaSpecification.LEFT_JOIN);
criteria.createAlias("bbb_ccc", "bbb.ccc", CriteriaSpecification.LEFT_JOIN);
criteria.add(Restrictions.ilike("bbb_ccc.name", name, MatchMode.ANYWHERE));
这将过滤实体aaa上的结果,但实际上不会获取关联实体(bbb和ccc)。要获取这些实体,最简单的方法是将映射注释参数设置为FetchMode.EAGER。但是,您也可以在代码中根据每个查询动态执行此操作。您需要使用别名来嵌套限制:
criteria.createAlias("bbb", "bbb", CriteriaSpecification.LEFT_JOIN);
criteria.createAlias("bbb_ccc", "bbb.ccc", CriteriaSpecification.LEFT_JOIN);
criteria.add(Restrictions.ilike("bbb_ccc.name", name, MatchMode.ANYWHERE));
这将过滤实体aaa上的结果,但实际上不会获取关联实体(bbb和ccc)。要获取这些实体,最简单的方法是将映射注释参数设置为FetchMode.EAGER。但是您也可以在代码中根据每个查询动态地执行此操作。现在不推荐使用CriteriaSpecification.LEFT\u JOIN,因此您可以使用
org.hibernate.sql.JoinType.LEFT\u OUTER\u JOIN
criteria.createAlias(“bbb”,“bbb”,JoinType.LEFT\u OUTER\u JOIN);
createAlias(“bbb_ccc”,“bbb.ccc”,JoinType.LEFT_OUTER_JOIN);
添加(Restrictions.ilike(“bbb_ccc.name”、name、MatchMode.ANYWHERE))
现在不推荐使用CriteriaSpecification.LEFT\u JOIN,因此您可以使用org.hibernate.sql.JoinType.LEFT\u-OUTER\u JOIN
criteria.createAlias(“bbb”,“bbb”,JoinType.LEFT\u OUTER\u JOIN);
createAlias(“bbb_ccc”,“bbb.ccc”,JoinType.LEFT_OUTER_JOIN);
添加(Restrictions.ilike(“bbb_ccc.name”、name、MatchMode.ANYWHERE))代码>现在不推荐使用带有CriteriaSpecification的createAlias方法现在不推荐使用带有CriteriaSpecification的createAlias方法