Hibernate多对多 - 连接表未保存

时间:2014-04-09 06:10:56

标签: java hibernate jpa

我有以下映射:

@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实例的查询...我得到一个列表。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

由于您已使用A@JoinTable定义为关系的拥有方,因此您必须将B个实例添加到A,以便它们能够保存在连接表中:

a.setBList(someBs);

或者,您可以将拥有方更改为B并保留代码。