gpt4 book ai didi

java - 如何在 hibernate 5.2 标准中使用 AND?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:15 24 4
gpt4 key购买 nike

我有两个对象 UserHouse。一个用户可以拥有多个房子。

来自 House.class 的注解:

@Entity
@Table(name="house")
public class House {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="house_id")
private int id;

@ManyToOne
@JoinColumn(name="user_id")
private User user;

@Column(name="country")
private String country;

@Column(name="city")
private String city;

@Column(name="street")
private String street;

@Column(name="post_code")
private String postCode;

@Column(name="house_number")
private String houseNumber;

@Column(name="flats")
private int flats;

@Column(name="picture")
private String picture;

@Column(name="surname_first") // order names will be written in receipt
private Boolean writeSurnameFirst;

@Column(name="cut_name") // Nado ili net sokrashat imena
private Boolean cutName;

@ManyToOne
@JoinColumn(name="currency_id")
private Currency currency;

@ManyToOne
@JoinColumn(name="documentation_lang_id")
private Languages documentationLang;

@Column(name="default_house")
private Boolean defaultHouse;

我需要根据 User 和列 defaultHouse = true 获取一个 House 对象。

我试过这段代码,但我不知道如何在其中实现User:

tx = sess.beginTransaction();
// create criteria builder
CriteriaBuilder builder = sess.getCriteriaBuilder();
// create criteria
CriteriaQuery<House> query = builder.createQuery(House.class);
// specify criteria root
Root<House> root = query.from(House.class);
query.select(root).where(builder.equal(root.get("default_house"), true)
.and(builder.equal(root.get(House.getUser), user)));
house = sess.createQuery(query).getSingleResult();
tx.commit();

最佳答案

实际上 builder.and() 有两个参数,这是 SQL 中 AND 关键字连接的两个限制条件,而 builder.and( ) 应该在 builder.where() 方法中使用。

更改以下代码:

query.select(root).where(builder.equal(root.get("default_house"), true)
.and(builder.equal(root.get(House.getUser), user)));

像这样:

query.select(root).where(builder.and(builder.equal(root.get("default_house"),  true), builder.equal(root.get(House.getUser), user))));

请引用Hibernate ORM 5.2.11.Final User Guide了解更多详情和更多示例。

注意:

Hibernate 关注的是对象而不是表,当我们使用它的模块如 Criteria 时,我们在对象中使用属性名称而不是数据库列名称。

关于java - 如何在 hibernate 5.2 标准中使用 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46449407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com