Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 嵌入ID上的JPA条件和谓词_Hibernate_Jpa_Criteria_Embeddable - Fatal编程技术网

Hibernate 嵌入ID上的JPA条件和谓词

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

我有点麻烦。我正在使用JPA标准进行动态选择(使用标准作为where子句的可选变量…),但我的一个实体有一个EmbeddedId,其中包含用户列,需要检查用户id

这里是我的实体

@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);