gpt4 book ai didi

java - 如何更新 hibernate 的每类表层次结构策略中的具体类?

转载 作者:行者123 更新时间:2023-12-02 08:00:16 26 4
gpt4 key购买 nike

我已经采用了 Hibernate 的每类表层次结构,如所述 here .

我有一个简单的一层层次结构,其中父级包含许多属性,子级包含更多相同的属性。与对象之间也存在关系。例如:

@Table(uniqueConstraints = { @UniqueConstraint(columnNames = {"name"}) })
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, length = 1)
abstract class X {
...
Long id;
String name;
List<A> a;
...
}
class Y extends X {
...
String getType() { return "Y"; }
...
}
class Z extends X {
...
String getType() { return "Z"; }
...
}
class A {}

我需要做的是将 Y 的持久实例“更新”为保持完整性的 Z 实例。如果我发出删除Y;创建 Z,我遇到了唯一约束违规(由于 hibernate 的删除顺序遵循创建/更新),但没有找到将 Y“更新”为 Z 的策略。

最佳答案

据我所知,如果不完全绕过 session ,就无法做到这一点,因为这意味着 Java 对象会更改其具体类型,而这是不可能的。即使如此,如果并发事务同时更新同一实体,您最好具有乐观并发性。如果另一个事务刷新实体或延迟加载实体,并且类型已更改,则会遇到问题。

简而言之,如果您需要这样做,则可能意味着您一开始就不应该拥有继承。考虑将表映射为单个实体,具有类型列和可选字段。

关于java - 如何更新 hibernate 的每类表层次结构策略中的具体类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com