2014-04-09 47 views
1

我有以下映射:Hibernate的多對多 - 連接表中不填充上保存

@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; 
    } 

A在B

沒有referenct

我有以下代碼:

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

既然你已經使用@JoinTable定義A的關係的擁有方,你必須將B實例添加到A,以便它們被保存在連接表:

a.setBList(someBs); 

或者,您可以將擁有方更改爲B並保持原樣。