我的J2EE应用程序中有大约10个不同的实体,它们现在共享完全相同的实现。它们都继承自已注释为@MappedSuperclass的同一通用抽象类,但该类不包含我在所有具体子类中重复的实现。
如果可以,我会将所有不同的字段和集合放在这个抽象超类中,并因此将实现方法也放在那里--所有这些都放在一个位置,而不是10个。
虽然我通常倾向于委托实现继承,但由于JPA的另一个限制,即不能将实体嵌入到集合中,因此使用委托的想法也不起作用。
当我只有3-4个这样的实体和2-3个方法时,这不是什么大问题,但现在我有大约10个--大约7-8个方法each...and其中一些方法变得非常复杂。我使用的“剪切-复制-粘贴”继承真的很糟糕。
还有没有别的好点子?
发布于 2010-07-06 15:15:10
事实证明,您可以使用实现继承或委托,只要您确保对JPA批注使用属性访问模式。我对JPA注释使用字段访问模式,这给我带来了无休止的痛苦,因为我不能注释泛型字段类型。
然而,使用属性访问模式,我只需创建我的通用抽象实现,而不是将其注释为实体、mappedsuperclass、embeddable或其他任何形式。这样,JPA就会忽略它。然后,在具体的子类中,我根据需要创建了受保护的getter和setters方法,并在这些方法上添加了JPA注释。
事实证明,它看起来很简单。
发布于 2010-07-04 14:28:36
@MappedSuperclass。@MappedSuperclass,并使用适当的继承层次结构生成超类abstract和@Entity。https://stackoverflow.com/questions/3173800
复制相似问题