连接表的休眠标准

时间:2012-07-16 12:22:13

标签: java hibernate many-to-many

帮助我Hibernate Guru .. 我有两个关系类,让我们打电话给A和B

@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",
          joinColumns=@JoinColumn(name="b_id"),
          inverseJoinColumns=@JoinColumn(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(?, ?, ?, ?)

所以如何使用Criteria代码创建????对于预期的列表结果列表我想使用Transformer。

由于

1 个答案:

答案 0 :(得分:0)

试试这个:

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


请记住,A和B必须使用id作为标识符才能使它们加入 some_field_of_A我指的是A类中你喜欢的任何内容,比如name。您可以限制这些类的任何属性。