【问题标题】:How to get Entity based on member object's field value rather than member objects ID如何根据成员对象的字段值而不是成员对象 ID 获取实体
【发布时间】:2018-10-10 14:50:22
【问题描述】:

我有三个类,下面显示相同的代码

查询类

@Entity
public class Enquiry 
{
  @Id
  @GeneratedValue
  private int id;

  private String name;

  private String discription;

  private int status;

  @Temporal(TemporalType.DATE)
  private Date enquiryDate;
}

用户类

 @Entity
 public class User 
 {
   @Id
   @GeneratedValue
   private int id;

   private String name;

   private String userId;

   private String password;
 }

UserEnquiryUserEnquiryMapping 类

@Entity
public class UserEnquiryMapping 
{
   @Id
   @GeneratedValue
   private int id;

   @ManyToOne
   private User user;

   @ManyToOne
   private Enquiry enquiry;
}

现在假设如果我们想要获取特定UserEnquiry(s),那么我们可以通过传递User 对象轻松获取它,并且hibernate 将使用来自id 对象的id 字段生成查询,并且下面提到了相同场景的代码。

EntityManager entityManager = session.getEntityManagerFactory().createEntityManager();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<UserEnquiryMapping> criteria = builder.createQuery(UserEnquiryMapping.class);
Root<UserEnquiryMapping> root = criteria.from(UserEnquiryMapping.class);
criteria.select(root);
criteria.where(builder.equal(root.get("user"), user));

userEnquiries = entityManager.createQuery(criteria).getResultList();

但我的要求是我想根据用户名获取用户查询,或者我们可以说我想生成这样的查询

 Select * from UserEnquiryMapping inner join Enquiry on UserEnquiryMapping.Enquiry_ID = Enquiry.ID inner join User on UserEnquiryMapping.User_ID = User.ID where User.name="Test";

我该怎么做?

【问题讨论】:

  • builder.equal(root.get("user").get("name"),user.getName());
  • 谢谢哥们,它成功了。

标签: java hibernate orm hibernate-mapping hibernate-criteria


【解决方案1】:
builder.equal(root.get("user").get("name"),user.getName()); 

很高兴它帮助你!

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多