Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate 5.2标准中使用和?_Java_Hibernate_Jpa_Criteria - Fatal编程技术网

Java 如何在hibernate 5.2标准中使用和?

Java 如何在hibernate 5.2标准中使用和?,java,hibernate,jpa,criteria,Java,Hibernate,Jpa,Criteria,我有两个对象User和House。一个用户可以拥有多个房屋 来自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 u

我有两个对象
User
House
。一个用户可以拥有多个房屋

来自
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();
tx=sess.beginTransaction();
//创建标准生成器
CriteriaBuilder=sess.getCriteriaBuilder();
//创建标准
CriteriaQuery=builder.createQuery(House.class);
//指定条件根
Root=query.from(House.class);
query.select(root).where(builder.equal(root.get(“default_house”),true)
和(builder.equal(root.get(House.getUser),user));
house=sess.createQuery(query.getSingleResult();
tx.commit();
事实上,
builder.and()
接受两个参数,这两个参数是SQL中与
关键字连接的两个限制,并且
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
关注的是对象而不是表,当我们使用其模块(如
Criteria
时,我们在对象中使用属性名称,而不是DB列名称

在CriteriaBuilder方法中,必须使用如下实体字段名称:

builder.equal(root.get("defaultHouse"), true)
而不是数据库列名:

builder.equal(root.get("default_house"), true)
我附上了我的例子:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Eje> query = builder.createQuery(Eje.class);
Root<Eje> productRoot = query.from(Eje.class);

query.select(productRoot)
     .where(builder.and(builder.equal(productRoot.get("id"), 1),                    builder.equal(productRoot.get(Eje_.factorCriticos).get(FactorCritico_.id), 1)));

result =(List<T>) session.createQuery(query).getResultList();
CriteriaBuilder=session.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(Eje.class);
Root productRoot=query.from(Eje.class);
query.select(productRoot)
其中(builder.and(builder.equal(productRoot.get(“id”),1),builder.equal(productRoot.get(Eje.factorCriticos.get(FactorCritico.id),1));
result=(List)session.createQuery(query.getResultList();