Hibernate 嵌入ID上的JPA条件和谓词
我有点麻烦。我正在使用JPA标准进行动态选择(使用标准作为where子句的可选变量…),但我的一个实体有一个EmbeddedId,其中包含用户列,需要检查用户id 这里是我的实体Hibernate 嵌入ID上的JPA条件和谓词,hibernate,jpa,criteria,embeddable,Hibernate,Jpa,Criteria,Embeddable,我有点麻烦。我正在使用JPA标准进行动态选择(使用标准作为where子句的可选变量…),但我的一个实体有一个EmbeddedId,其中包含用户列,需要检查用户id 这里是我的实体 @Entity @Table(name = "user_like") public class UserLike extends AbstractTimestampEntity implements Serializable { @EmbeddedId private UserLike.userLikeP
@Entity
@Table(name = "user_like")
public class UserLike extends AbstractTimestampEntity implements Serializable {
@EmbeddedId
private UserLike.userLikePK userLikePK= new UserLike.UserLikePK();
...
with all the setter and gets
...
@Embeddable
public static class UserLike implements Serializable{
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
... (and an other column, not important for now=
}
}
User是包含userId列的其他实体
这就是我的查询
Root<Poi> p = cq.from(Poi.class);
Join<Poi,UserLike> ul = p.join("userLike");
List<Predicate> predicates = new ArrayList<Predicate>();
Predicate predicate = cb.like(cb.upper(p.<String>get("name")), "%" + poiName.toUpperCase() + "%");
predicates.add(predicate);
Predicate predicate2 = cb.equal(ul.get("userLikePK.user.idUser"), userId);
predicates.add(predicate);
//multi select because i need some info from p and ul as well....
cq.multiselect(p, ul);
谢谢 您需要将get链接起来
Predicate predicate2 = cb.equal(ul.get("userLike").get("user").get("idUser"), userId);
Predicate predicate2 = cb.equal(ul.get("userLike").get("user").get("idUser"), userId);