2011-02-10 60 views
6

我需要扩展一个实体,具有相同的特性而不使用抽象类。用注解扩展hibernate实体

我可以编码像下面的东西吗?提前

@Entity 
@Table(name="ABC") 
@SequenceGenerator(sequenceName="SEQ_ABC",name="idGenerator",allocationSize=1) 
public class Abc { 
.. // define members 
} 

@Entity 
@Table(name="EX_ABC") 
public class ExAbc extends Abs { 
.. // define extras.. 
} 

THX

+1

你的意思是`扩展Abc`而不是`extends Abs`? – 2017-01-13 16:41:23

回答

15

是的,这一个工程没有任何问题。但你应该看看inheritance annotation.

什么问题:你有一个表“Abc”,其中包含field1,filed2;然后你有ExAbc,其中包含“Abc”字段和adition字段3。 现在,如果你认为数据库的话,那么这个系统应该怎样处理这两个类呢?把它们放到一个表中让所有类型为“Abc”的行的field3 = null?或把它们放到两个不同的表中?或者把普通的字段放在一个表中,并为附加的字段创建第二个字段?

每种解决方案都有其优点和缺点,因为您可以在我发布的链接中阅读,然后根据您的情况决定哪种方式是最佳方式。

(默认我认为是加盟策略,但我不会说是如此对每个数据库计数)

+0

THX的答案荣誉, 我的业务规则适合@Inheritance(策略= InheritanceType.TABLE_PER_CLASS), 但是当我取的记录,我得到两个父母和孩子记录(UNION ALL),如何能我获取特定的父母或孩子记录。 thx再次提前 – emre 2011-02-10 16:21:30