【发布时间】:2014-11-18 10:34:01
【问题描述】:
我目前正在我的工作中试用 Hibernate Criteria。
假设我有以下实体。
@Entity
@Table(name="form_table_name")
public class Forms extends Auditable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="FormID")
private Long formID;
@Column(name="FormTitle")
private String formTitle;
@OneToMany(mappedBy = "form", fetch = FetchType.EAGER , cascade = {CascadeType.ALL} , orphanRemoval = true)
private Set<FormsResponses> responses;
..........//rest of the code with fields, getters, setters etc.
@Entity
@Table(name="response_table_name")
public class FormsResponses extends Auditable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ResponseID")
private Long responseID;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="FormID")
private Forms form;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="OnBehalfOf")
private Users onBehalfOf;
..........//rest of the code
考虑我有以下数据 form_table_name
FormID FormTitle
------ ---------
1 Form1
2 Form2
response_table_name
ResponseID FormID OnBehalfOf
---------- ------ ----------
1 1 user1
2 1 user2
4 2 user2
我想从 Forms 实体加载数据,当且仅当 FormsResponses 中没有与我为“onBehalfOf”字段传递的值相对应的记录并且'formID'。
比如说,我当前的“onBehalf”值是“user1”。我想检索 form1 和 form2。但是,如果表单的 formsResponse 映射行中有“user1”,则不应显示表单。或者,如果用户已经尝试过表单,则不应检索它。在这种情况下,该表单将为“Form2”,而“user2”则为“空”
Criteria cr = session.createCriteria(Forms.class);
cr.createCriteria("responses", "res", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.eq("res.onBehalfOf.userID", userID));
cr.add(Restrictions.sizeEq("responses", 0));
我试过这个,但它不符合我的目的。我希望有人能指出我正确的方向。
【问题讨论】:
标签: spring hibernate hql criteria