Jpa 存储时不进行级联更新
@S2JH 你好,想跟你请教个问题:
customer 和 shop 的主键互为对方的外键,多个customer可以对应同一个shop,代表shop拥有多个客服 和店长。一个shop只能对应一个customer,代表shop只能有一个店长。在customer类:
@MetaData("美月淘集市店铺") private C2cShopInfo c2cShopInfo; @ManyToOne(cascade = CascadeType.DETACH) @JoinColumn(name = "c2c_shop_info_sid") @JsonProperty @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) public C2cShopInfo getC2cShopInfo() { return c2cShopInfo; } public void setC2cShopInfo(C2cShopInfo c2cShopInfo) { this.c2cShopInfo = c2cShopInfo; }
@MetaData("关联客户") private CustomerProfile customerProfile; @OneToOne(cascade = CascadeType.DETACH) @JoinColumn(name = "customer_profile_sid") @JsonProperty public CustomerProfile getCustomerProfile() { return customerProfile; } public void setCustomerProfile(CustomerProfile customerProfile) { this.customerProfile = customerProfile; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
恩 这块坑确实多还深!不用外键估计是不可能的啊
CascadeType.DETACH你这个属性表示在外键数据更新时把外键关联设为null呀,另外你看看这个关联字段可不可以为null呀,还有就是数据库那边了;反正这一块坑很多呀,玩不好容易把自己玩死,建议不要建立外键约束,表与表之间存个主键就行多做个关联查询罢了
@S2JH
在涉及外键相关属性进行更新存储时,S2JH 框架处理经常会出错。比如上述的客户与店铺的关系,在翻页时,会进入无限递归,导致页面无法正确显示。还有一种是自身关联的树状数据结构。当设置其父亲节点为空时,在保存时出现异常。
@S2JH 您对这个情况了解吗?有什么解决方案吗?
@S2JH 哎呀!我好像知道之前为啥总错了,貌似是在 引用CascadeType 时,引用了错误的包,正确的应该是引用javax.persistence.CascadeType
框架采用Jackson进行对象JSON数据序列化,对于互相指向的对象需要合理设置JsonIgnore注解处理递归循环问题。