具有连接表的双向一对多

我在使用JoinTables进行双向一对多关联时遇到了一些问题。 这就是我得到的:

A类:

@OneToMany @JoinTable(name="join_table", JoinColumns={@JoinColumn(name="a_id")}, inverseJoinColumns={@JoinColumn(name="b_id")} ) @Cascade(org.hibernate.annotations.CascadeType.ALL) public Set getBs() { return bs; } 

B级:

 @ManyToOne @JoinTable(name="join_table", joinColumns={@JoinColumn(name="b_id", insertable=false,updatable=false)}, inverseJoinColumns={@JoinColumn(name="a_id", insertable=false,updatable=false)}) public A getA() { return a; } 

如果我创建了A和B的实例,请将B的实例添加到A并保存。 有用。 但是当我重新加载A的实例并尝试访问B组时,它会抛出一个带有“非法访问加载集合”消息的LazyInitializationError。

我在哪里错了? :)任何人都可以指向一个使用连接表的双向关联的例子。 如果所有权保留在A类,我已经搜索了hibernate.org上的文档,但我似乎无法找到它。

-Daniel

您的映射是正确的,这就是条目保存在数据库中的原因。 提取中的问题是由于惰性初始化

要解决它,修改A类的映射,

 @OneToMany(fetch=FetchType.LAZY) @JoinTable(name="join_table", joinColumns={@JoinColumn(name="a_id")}, inverseJoinColumns={@JoinColumn(name="b_id")} ) @Cascade(org.hibernate.annotations.CascadeType.ALL) public Set getBs() { return bs; } 

这将触发对表B的附加查询并初始化集合。 它可能会影响性能,具体取决于被告表中的条目数。

请阅读此处的API以获取更多信息。