2016-07-14 18 views
0

私はHibernateを学んでおり、基本的なHQL結合構文についての質問があります。私はこれに続くtutorialです。だから私はそれはそう、私はHQLでSQLHibernate HQLでの結合条件 "ON columns"の指定?

select * from Category A inner join Product B on A.id=B.category_id, 

で、このようなものでしょう、カテゴリおよび製品に参加する必要があり

@Entity 
@Table(name = "CATEGORY") 
public class Category { 

    private long id; 
    private String name; 

    private Set<Product> products; 

    public Category() { 
    } 

    public Category(String name) { 
     this.name = name; 
    } 

    @Id 
    @Column(name = "CATEGORY_ID") 
    @GeneratedValue 
    public long getId() { 
     return id; 
    } 


    @OneToMany(mappedBy = "category", cascade = CascadeType.ALL) 
    public Set<Product> getProducts() { 
     return products; 
    } 

    // other getters and setters 
} 

@Entity 
@Table(name = "PRODUCT") 
public class Product { 
    private long id; 
    private String name; 
    private String description; 
    private float price; 

    private Category category; 

    public Product() { 
    } 

    public Product(String name, String description, float price, 
      Category category) { 
     this.name = name; 
     this.description = description; 
     this.price = price; 
     this.category = category; 
    } 

    @Id 
    @Column(name = "PRODUCT_ID") 
    @GeneratedValue 
    public long getId() { 
     return id; 
    } 

    @ManyToOne 
    @JoinColumn(name = "CATEGORY_ID") 
    public Category getCategory() { 
     return category; 
    } 

    // other getters and setters 
} 

、私はプロダクトとカテゴリのエンティティを持っていると言います"on"条件を削除すると、上記クエリのHQLは

String hql = "from Product p inner join p.category"; 

Query query = session.createQuery(hql); 
です。

なぜHQLではオンにする必要はありませんか?

答えて

2

アソシエーション(例:@ManyToOne)がある場合は、onは必要ありません。ハイバーネイトはそれをSQLに追加します。

Hibernate 5.1の前に、関連がない場合は問題でした。 Hibernateは5.1からは、アドホックを使用することができます結合します。そのほかに

Join unrelated entities in JPA

を、HQLにも結合条件を修飾するwith句を定義しています。

The Hibernate WITH clause, the HQL equivalent of SQL's ON