Jpa 存储时不进行级联更新

发布于 2021-11-27 09:44:21 字数 1426 浏览 888 评论 5

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



现在需要在shop中定义关联的customer,因为我想在保存shop时,不对customer进行级联更新,只是对外键值存储,这时在shop中如何注解该customer呢?试了很多注解,在shop 选择customer时,总是出错。希望你能给我一点提示,在shop类:

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

落墨 2021-11-30 15:33:04

恩 这块坑确实多还深!不用外键估计是不可能的啊

等风来 2021-11-30 14:27:28

CascadeType.DETACH你这个属性表示在外键数据更新时把外键关联设为null呀,另外你看看这个关联字段可不可以为null呀,还有就是数据库那边了;反正这一块坑很多呀,玩不好容易把自己玩死,建议不要建立外键约束,表与表之间存个主键就行多做个关联查询罢了

囚你心 2021-11-30 12:40:55


@S2JH
 在涉及外键相关属性进行更新存储时,S2JH 框架处理经常会出错。比如上述的客户与店铺的关系,在翻页时,会进入无限递归,导致页面无法正确显示。还有一种是自身关联的树状数据结构。当设置其父亲节点为空时,在保存时出现异常。

@S2JH  您对这个情况了解吗?有什么解决方案吗?

鹤舞 2021-11-29 21:08:22


@S2JH  哎呀!我好像知道之前为啥总错了,貌似是在 引用CascadeType 时,引用了错误的包,正确的应该是引用javax.persistence.CascadeType

天涯离梦残月幽梦 2021-11-29 20:10:59

框架采用Jackson进行对象JSON数据序列化,对于互相指向的对象需要合理设置JsonIgnore注解处理递归循环问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文