【问题标题】:How to fetch entities by objects value in JPA criteria api query如何在 JPA 标准 api 查询中按对象值获取实体
【发布时间】:2018-02-12 16:37:09
【问题描述】:

我正在使用 JPA 和带有延迟加载的 JSF 数据表。 在这里,一辆车可以由多个用户拥有。因此,当我登录应用程序时,我想要登录用户拥有的汽车(假设它为 userId=1)。 我有一个包含 carId 和 userId 列的映射表“Cars_User”。 我的实体是这样的 我的汽车课

@Entity
@Table(name="car")
public class Car implements Serializable {
 private static final long serialVersionUID = 1L;

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private String id;

 @Transient
 private boolean myCar;

 @NotNull
 @Size(min = 1, max = 50)
 public String name;

 @OneToMany(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY, orphanRemoval = true)
 @JoinTable(name = "Cars_User", joinColumns = @JoinColumn(name = "carId"), inverseJoinColumns = @JoinColumn(name = "userId"))
 private List<User> carUsers = new ArrayList<User>();

 getters ...

 setters ...
}

用户类

@Entity(name = "User")
public class User implements Serializable {

   private static final long serialVersionUID = 1L;

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id;

   private String firstName;

   private String lastName;
}

我在link 中找到了一个字符串集合列表的答案,但在我的情况下如何实现。 我想在标准 api 中获取所有汽车实体,其中包含 carUsers 列表中的登录用户 ID“userId”。有人可以帮忙吗?

【问题讨论】:

    标签: jpa collections criteria-api


    【解决方案1】:

    我找到了解决方案。我已经在 isMember 函数中传递了登录的用户对象“user”。这可能对某人有所帮助。

    CriteriaBuilder criteriaBuilder = em.getEntityManagerFactory().getCriteriaBuilder(); 
    CriteriaQuery<Car> criteria = criteriaBuilder.createQuery(Car.class);
    Root<Car> root = criteria.from(Car.class);
    criteria.where(criteriaBuilder.isMember(user, root.get(Car_.carUsers)));
    List<Car> cars = em.createQuery(criteria).getResultList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2012-02-06
      • 2011-11-12
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多