2012-07-16 89 views
0

幫我休眠大師.. 我有2個關係類,姑且稱之爲類和B類Hibernate的標準連接表

@Entity 
@Table(name="A") 
public class A extends Serializable{ 

     @Id 
     @Column(name="a_id") 
     private int id; 
     @Column(name="a_name") 
     private String name; 

    /* 
     *.....Setter and Getter 
     */ 
} 



@Entity 
@Table(name="B") 
public class B extends Serializable{ 

     @Id 
     @Column(name="b_id") 
     private int id; 
     @ManyToMany(
      fetch= FetchType.EAGER, 
      targetEntity=package.A.class, 
      cascade={CascadeType.ALL} 
    ) 
     @JoinTable(
      name="B_A", 
      [email protected](name="b_id"), 
      [email protected](name="a_id") 
    ) 
     @Fetch(FetchMode.SUBSELECT) 
     private List<A> list; 

    /* 
     *.....Setter and Getter 
     */ 
} 

Hibernate會生成3個表A,B,和B_A。與表B_A有2個外鍵,主鍵表A和主鍵表B中的一個再外鍵的外鍵,

我想從表A中選擇數據,如查詢:

select * from A a inner join B_A ba on ba.a_id = a.id inner join B b on b.b_id = ba.b_id where b.id in(?, ?, ?, ?) 

所以標準代碼如何創建?和期望的列表結果列表我想使用Transformer。

感謝

+0

你有什麼試過?您是否閱讀過文檔? http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#querycriteria-associations – 2012-07-16 12:25:02

回答

0

試試這個:

criteria.createCriteria(A.class) 
.createCriteria("id", "join_between_a_b") 
.add(Restrictions.eq("some_field_of_A", someValue)); 


記住,A和B必須有id作爲他們的標識符,以使他們加入。
By some_field_of_A我的意思是說你喜歡A級的任何東西,比如name。你可以限制這些類的任何屬性。