我有一个实体类 A 和子类作为待定用户,如下所示。
一个.java
@Entity
public class A implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "PENDING", joinColumns = {@JoinColumn(name = "aId")}, inverseJoinColumns = {@JoinColumn(name = "userId")})
@Cascade(value = org.hibernate.annotations.CascadeType.ALL)
private Set<User> approvers = new HashSet<User>();
@Column(name = "active", nullable = false, columnDefinition = "varchar default 'Y'")
@org.hibernate.annotations.Type(type = "yes_no")
private boolean active = true;
@NotBlank
@Column(nullable = false, unique = true)
private String poNo;
}
用户.java
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private int id;
@NotBlank(message = "User ID cannot be empty")
@Column(unique = true, nullable = false, updatable = false)
private String userId;
}
我想检索所有将 userId 指定为批准者之一的 A 对象。如何用休眠标准写这个?
当我有一对一映射时,我写如下。
createEntityCriteria()
.add(Restrictions.eq("approvers.userId", userId))
.add(Restrictions.eq("active", true)).list();
正如我们现在改为多对多映射如何实现这一点?
我对此很陌生,但是我已经成功地将此方法用于我正在处理的项目中的许多实体。
我已经将此功能与类似于您上面提到的代码一起使用。但是,如果这不起作用,您可以使用 Join,如下所示:
createEntityCriteria()
.createAlias("approvers", "apprs", JoinType.INNER_JOIN)
.add(Restrictions.eq("apprs.userId", userId))
.add(Restrictions.eq("active", true)).list();
INNER_JOIN 将仅返回具有批准者的记录,LEFT_OUTER_JOIN 将返回具有批准者的所有父行(如果可用)。
使用:org.hibernate.sql.JoinType
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句