假设我有以下实体:
@Entity
@Table(name = "A")
public class A implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany
@JoinTable(name="A_B", joinColumns = @JoinColumn(name = "A_ID"),
inverseJoinColumns = @JoinColumn(name = "B_ID"))
private List<B> bList1;
@OneToMany
@JoinTable(name="A_B", joinColumns = @JoinColumn(name = "A_ID"),
inverseJoinColumns = @JoinColumn(name = "B_ID"))
private List<B> bList2;
// getters and setters
}
@Entity
@Table(name = "B")
public class B implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//some other data
//getters and setters
}
@JoinTable结构就像是:
A_B (a_id, b_id, discriminator);
是否可以使用一些注释来指定鉴别器列,基于哪个bList1和bList2将被填充?
答案 0 :(得分:1)
发布代码是不可能的,因为即使你可以指定集合上的@Where("discriminator='list1'")
和@Where("discriminator='list2'")
来检索时进行过滤,但是在插入/更新时,hibernate仍然不会保留鉴别器。 / p>
你可以尝试做这项工作(我没有测试过这个):
@ManyToAny(metaColumn = @Column( name = "discriminator" ) )
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
@MetaValue( value = "list1", targetEntity = B.class ) } )
private List<B> bList1;
@ManyToAny(metaColumn = @Column( name = "discriminator" ) )
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
@MetaValue( value = "list2", targetEntity = B.class ) } )
private List<B> bList2;
或者你只是为jointable创建一个具有鉴别器值的类,并在list1和2的属性中处理它。