首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该为一个不可变的hibernate实体使用什么cascadeType?

问我应该为一个不可变的hibernate实体使用什么cascadeType?
EN

Stack Overflow用户
提问于 2021-10-12 09:28:04
回答 1查看 36关注 0票数 0

对于其字段不能修改,但可以重新分配给新实例的hibernate实体属性,我应该使用什么级联类型?

示例

代码语言:javascript
复制
    @ManyToOne(cascade = { CascadeType.REFRESH })
    @JoinColumn(name = "ADDRESS_ID", nullable = true)
    private Address address;

我们可以为当前对象分配一个新地址,但不能修改现有地址的字段,因为这些地址在数据库中应该是不可变的。我们应该能够与实体一起创建新地址,但不能删除它们。我们应该使用什么CascadeType?

EN

回答 1

Stack Overflow用户

发布于 2021-10-19 12:39:40

CascadeType指的是应该级联到属性对象的操作。如果调用EntityManager.persist,它将使用CascadeType.PERSIST级联到属性,对于EntityManager.merge,它是CascadeType.MERGE;对于EntityManager.remove,它是CascadeType.REMOVE;对于EntityManager.refresh,它是CascadeType.REFRESH;最后,对于EntityManager.detach,它是<代码>D9。

用于保存的级联类型(即持久化/合并)控制是否应在相应操作期间刷新对Address实体所做的更改(可通过该属性访问)。因为您根本不希望这个实例是可变的,所以这些级联类型没有任何意义,而且因为它是不可变的,所以刷新也没有任何意义。

为了保证不发生任何更改,您必须正确地封装实体,例如使用字段访问,而不是公开setter。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69538116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档