java - 如何根据成员对象的字段值而不是成员对象 ID 获取实体
问题描述
我有三个类,下面显示相同的代码
查询类:
@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;
}
现在假设如果我们想要获取Enquiry(s)
一个特定User
的,我们可以通过传递一个对象轻松获取它,User
并且休眠将通过使用id
来自User
对象的字段生成查询,下面提到了相同场景的代码。
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());
很高兴它能帮助你!
推荐阅读
- reactjs - React Native Gifted Chat 懒加载器
- javascript - Three.js:如何正确添加envMap?
- php - PHP:在mysql中按时间戳顺序从多个表中获取数据
- javascript - 将一个类添加到第二个下一个兄弟类或第二个前一个兄弟类
- c# - HttpResponeMessage 返回 401(未经授权)
- java - Android 10 / Android Q 上的 Realm 始终返回 null
- php - 在 if/-then-else 语句中插入行
- graphql - FastAPI + GraphQL 出现错误 NoneType is callable when raise Exception
- ruby-on-rails - prune_strategy 在 capybara-screenshot 中不起作用,带有屏幕截图的文件夹不会自动清除
- php - 配置作曲家使用带前缀的类名