2012-07-16 90 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。你可以限制这些类的任何属性。