Jpa 存储时不进行级联更新? 400 报错
@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; }
框架采用Jackson进行对象JSON数据序列化,对于互相指向的对象需要合理设置JsonIgnore注解处理递归循环问题。
###### @S2JH 哎呀!我好像知道之前为啥总错了,貌似是在 引用CascadeType 时,引用了错误的包,正确的应该是引用javax.persistence.CascadeType###### @S2JH 在涉及外键相关属性进行更新存储时,S2JH 框架处理经常会出错。比如上述的客户与店铺的关系,在翻页时,会进入无限递归,导致页面无法正确显示。还有一种是自身关联的树状数据结构。当设置其父亲节点为空时,在保存时出现异常。 @S2JH 您对这个情况了解吗?有什么解决方案吗?######CascadeType.DETACH你这个属性表示在外键数据更新时把外键关联设为null呀,另外你看看这个关联字段可不可以为null呀,还有就是数据库那边了;反正这一块坑很多呀,玩不好容易把自己玩死,建议不要建立外键约束,表与表之间存个主键就行多做个关联查询罢了######恩 这块坑确实多还深!不用外键估计是不可能的啊
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。