将hibernate持久化类替换为其同级类

将hibernate持久化类替换为其同级类,hibernate,Hibernate,我正在进行一个使用Hibernate来持久化实体的项目(完整的堆栈包括struts2、spring、jpa和Hibernate) 我有两个类List和Pie,它们都是从小部件类继承的(使用InheritanceType.JOINED)。我无法理解这种情况:我已将一个列表实体持久化到数据库中。但是现在我想用一个饼图实体来代替它。我该怎么做 我唯一能想到的是创建另一个实体,复制公共属性,删除旧属性,保留新属性(使用不同的id),当然所有这些都在事务中 你知道还有别的方法吗 非常感谢。另一种方法是使用

我正在进行一个使用Hibernate来持久化实体的项目(完整的堆栈包括struts2、spring、jpa和Hibernate)

我有两个类
List
Pie
,它们都是从
小部件
类继承的(使用
InheritanceType.JOINED
)。我无法理解这种情况:我已将一个
列表
实体持久化到数据库中。但是现在我想用一个
饼图
实体来代替它。我该怎么做

我唯一能想到的是创建另一个实体,复制公共属性,删除旧属性,保留新属性(使用不同的id),当然所有这些都在事务中

你知道还有别的方法吗


非常感谢。

另一种方法是使用本机查询直接修改存储的实体。如果使用鉴别器列,则可以修改存储在列中的a类值,并将其更改为B类所需的值。还需要修改现有数据以匹配新类

我提到这是一种替代方法,但我并不是说这一定是推荐的方法。使用此技术可能会导致缓存问题,并可能影响可能存在的任何活动对象

您提到的方法是您可以在JPA空间中使用的更干净的方法之一

编辑

这种方法适用于所有继承策略。对于Join和TABLE_PER_类继承,您需要编写查询,以便在表之间迁移数据,以及可能需要根据使用的策略设置的任何鉴别器列更改


从长远来看,这种方法可能会极大地影响应用程序的可维护性。您提到的方法的一个好处是,您可以利用反射在两个对象之间的公共字段上快速复制,从而简化将来的维护。

另一种方法是使用本机查询直接修改存储的实体。如果使用鉴别器列,则可以修改存储在列中的a类值,并将其更改为B类所需的值。还需要修改现有数据以匹配新类

我提到这是一种替代方法,但我并不是说这一定是推荐的方法。使用此技术可能会导致缓存问题,并可能影响可能存在的任何活动对象

您提到的方法是您可以在JPA空间中使用的更干净的方法之一

编辑

这种方法适用于所有继承策略。对于Join和TABLE_PER_类继承,您需要编写查询,以便在表之间迁移数据,以及可能需要根据使用的策略设置的任何鉴别器列更改


从长远来看,这种方法可能会极大地影响应用程序的可维护性。您提到的方法的一个好处是,您可以利用反射在两个对象之间的公共字段上快速复制,这简化了将来的维护。

没有定义继承类型。。。但其行为类似于继承类型。未定义继承类型。。。但是它的行为类似于继承类型。加入了谢谢你的提示克里斯!但是使用鉴别器列意味着拥有一个包含每个类的所有属性的列的大型表,我不确定我是否想这样做。与多个表相比,JPA继承有很多优点还是缺点?JPA继承中使用了三种方法:单表、联接和多表。在前两种情况下,您将使用鉴别器列,而在第三种情况下,您不使用鉴别器列。我列出的技术适用于所有人(有或没有鉴别器列),但是,对于后两种方法,使用本机查询在多个表之间迁移数据要复杂得多。您用于JPA继承存储的方法取决于您的数据需求,因为它们各有优缺点(搜索是跨多个表使用更多的资源,单个表每行加载更多的数据,等等)。好的,所以基本上它要么与JPA交互,要么与本机查询交互。。。我想我会坚持我的第一个选择然后。。。我计划有6到7个类都继承自同一个基类(将来某个时候可能会更多)。。。但是谢谢你对可维护性的评论,我对我即将编写的代码感觉好多了!谢谢你的提示,克里斯!但是使用鉴别器列意味着拥有一个包含每个类的所有属性的列的大型表,我不确定我是否想这样做。与多个表相比,JPA继承有很多优点还是缺点?JPA继承中使用了三种方法:单表、联接和多表。在前两种情况下,您将使用鉴别器列,而在第三种情况下,您不使用鉴别器列。我列出的技术适用于所有人(有或没有鉴别器列),但是,对于后两种方法,使用本机查询在多个表之间迁移数据要复杂得多。您用于JPA继承存储的方法取决于您的数据需求,因为它们各有优缺点(搜索是跨多个表使用更多的资源,单个表每行加载更多的数据,等等)。好的,所以基本上它要么与JPA交互,要么与本机查询交互。。。我想我会坚持我的第一个选择然后。。。我计划有6到7个类都继承自同一个基类(将来某个时候可能会更多)。。。但是谢谢你对可维护性的评论,我对我即将编写的代码感觉好多了!