Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA/Hibernate:子类型与策略;图案';_Java_Hibernate_Jpa_Domain Model_Anemic Domain Model - Fatal编程技术网

Java JPA/Hibernate:子类型与策略;图案';

Java JPA/Hibernate:子类型与策略;图案';,java,hibernate,jpa,domain-model,anemic-domain-model,Java,Hibernate,Jpa,Domain Model,Anemic Domain Model,下面是一个JPA注释的类型层次结构,其中所有数据字段(以及相关的getter和setter)都是超类型的成员,以及用于实现业务逻辑的抽象方法。有任意数量的子类型实现这些抽象方法而不添加数据成员,因此我们使用单表继承策略,因此我们只需要数据库中的一个表来支持此类型层次结构 我这样做是因为,根据数据的内容,必须实现不同的行为才能实现最终目标 @实体 @桌子 @继承(策略=InheritanceType.SINGLE_表) @鉴别器柱 公共抽象类超实体{ //几个字段以及getter和setter .

下面是一个JPA注释的类型层次结构,其中所有数据字段(以及相关的getter和setter)都是超类型的成员,以及用于实现业务逻辑的抽象方法。有任意数量的子类型实现这些抽象方法而不添加数据成员,因此我们使用单表继承策略,因此我们只需要数据库中的一个表来支持此类型层次结构

我这样做是因为,根据数据的内容,必须实现不同的行为才能实现最终目标

@实体
@桌子
@继承(策略=InheritanceType.SINGLE_表)
@鉴别器柱
公共抽象类超实体{
//几个字段以及getter和setter
...
//业务逻辑的抽象方法声明
...
}
@实体
@鉴别器值(“某些值”)
公共类SomeSubtype扩展了SuperEntity{
//抽象方法的实现
...
}
这是对JPA/Hibernate中鉴别器列概念的曲解吗


一位同事认为,由于数据的结构不会因子类型而异,因此抽象方法和相应的实现应该转移到类似策略模式的方法中。他的想法更好吗?

更好是非常主观的。听起来组合和策略是一种有效的选择,这可能会使您不需要为业务逻辑的每个实现映射另一个实体

抛开JPA和hibernate不谈,我读过的每一本OO设计书都以“支持组合而不是继承”作为分享行为的开头


假设您有一个数据对象,您不能在每个非休眠策略之间共享该对象并对其进行操作吗?不管怎么说,少点JPA/hibernate对眼睛来说更容易。

更好是非常主观的。听起来组合和策略是一种有效的选择,这可能会使您不需要为业务逻辑的每个实现映射另一个实体

抛开JPA和hibernate不谈,我读过的每一本OO设计书都以“支持组合而不是继承”作为分享行为的开头


假设您有一个数据对象,您不能在每个非休眠策略之间共享该对象并对其进行操作吗?不管怎么说,少用JPA/hibernate对眼睛来说是比较容易的。

我曾经研究过使用组合,但它会让服务层的某些事情变得有点混乱。然而,我想我越来越同意你和我的同事的看法,我上面的继承计划并不好。我将进一步研究组合方法——谢谢你的回答。我已经研究过使用组合,但它会使服务层的某些事情变得有点混乱。然而,我想我越来越同意你和我的同事的看法,我上面的继承计划并不好。我将进一步研究作文方法——谢谢你的回答。