2017-09-27 4 views
1

私は2つのオブジェクトUserHouseを持っています。 1人のユーザーが複数の家を持つことができます。 House.classから休止状態でANDを使用する方法5.2基準?

注釈:

@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を実装する方法を取得することはできません:実際builder.and()

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(); 

答えて

1

はSQLでANDキーワードで接合すべき2つの制約されている2つのパラメータをとり、 は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のようにそのモジュールを使用するときに我々は、DBのカラム名、オブジェクトではなく名前を属性を使用。

0

CriteriaBuilder方法では、次のような実体フィールド名を使用する必要があります。

builder.equal(root.get("defaultHouse"), true) 

はなく、データベースのカラム名:

builder.equal(root.get("default_house"), true)