【求助】hibernate使用@ManyToOne关联保存问题。

yijing4756 2017-11-15 09:48:59
我在项目中使用hibernate中在实体类里面利用@ManyToOne来进行关联。
但是因为我@ManyToOne中A表关联B表的字段并非ID字段,而是我自己定义的一个code字段。
A表实体类中是这么写的:

@Entity
@Table(name="A")
public class A implements Serializable {

//关联表B,关联字段是bcode,是一个自定义的code字段。
@ManyToOne
@JoinColumn(name="bcode",referencedColumnName="bcode")
private B b;

但是在给A表追加新数据的时候,会提示:object references an unsaved transient instance - save the transient instance before flushing
说白了就是我插入数据的时候表A的实体类中的B实体类处于游离状态无法提交,
这个时候,虽然说可以通过 @ManyToOne(cascade=CascadeType.ALL)这样追加级联属性来解决游离问题。但是随之而然也出现了一个问题。表A的数据插入成功了, 但是表B也跟着插入一条数据。表B的插入数据就是表A中实体类关联的实体类B里面的数据。
我个人猜测是:首先我表A关联的表B的字段并非ID字段,而是我自己定义的CODE字段。但是表B中的ID字段是自动递增。导致了表A在提交数据的时候,A实体类中的B实体类的ID字段就自动递增了。所以导致插入一条新的数据。但是按常理来说我在表A中插入数据的时候不应该对表B进行操作才对。
所以请问如何解决这个问题。
如下图,在给表A追加数据的时候,表B跟着新增了一条数据。termcode就是我关联的字段

...全文
396 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
verejava 2018-08-10
  • 打赏
  • 举报
回复
a945943622 2018-08-10
功能完整性比性能权重高
  • 打赏
  • 举报
回复
yijing4756 2017-11-15
我在网上也查了很久,虽然说在表A提交的时候,先load一下。获取关联字段的那条信息再set进A字段可以解决问题,但是这样就导致了每次新增一条数据,或者说编辑一条数据都需要进行一次数据查询。这样的话服务器压力就更大了
  • 打赏
  • 举报
回复
相关推荐
发帖
Web 开发
加入

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2017-11-15 09:48
社区公告
暂无公告