我有以下映射:
@Entity
public class A{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer aId;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "A_to_B",
joinColumns = {@JoinColumn(name = "aId", referencedColumnName = "aId")},
inverseJoinColumns = {@JoinColumn(name = "bId", referencedColumnName = "bId")})
private Set<B> bList;
我有B班:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
public abstract class B {
@Id
@Column(name = "bId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Integer id;
}
B中没有A的参考。
我有以下代码:
List<A> someAs = .... // Generated
B b = ... // also generated
b.setAList(someAs);
Session session = sessionFactory.openSession();
for (A a : someAs) {
session.save(a);
}
session.save(b);
session.close();
结果是保存所有A实例。 B实例也保存了。 但是连接表没有填充,所以如果用左连接获取B实例的查询...我得到一个列表。
我该怎么办?
答案 0 :(得分:1)
由于您已使用A
将@JoinTable
定义为关系的拥有方,因此您必须将B
个实例添加到A
,以便它们能够保存在连接表中:
a.setBList(someBs);
或者,您可以将拥有方更改为B
并保留代码。