【发布时间】: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;
}
现在假设如果我们想要获取特定User 的Enquiry(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