我正在开发基于Spring,JPA和Hibernate的Maven Java Web项目。
该项目的一部分应在另一个非常相似的项目中重复使用,因此被提取为Maven模块。此服务和相应的实体注释如下:
@Entity
public class TypeAUser
@Entity
public class TypeBUser
两个项目都有相似但略有不同的UserEntities。
adb shell dumpsys battery set ac 1
Message Entity与每个项目中的一个UserEntities有@OneToMany关系。
我考虑过一般的UserEntity,但是想避免创建其他表以及包含“其他”项目字段的表。
任何想法都表示赞赏。
祝你好运, 斯蒂芬
答案 0 :(得分:2)
如果您不想创建其他表格,那么您可能需要考虑使用SINGLE_TABLE strategy.
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class UserEntity {
...
}
@Entity
public class TypeAUser extends UserEntity {
...
}
@Entity
public class TypeBUser extends UserEntity {
...
}
答案 1 :(得分:1)
好吧,在谈论Hibernate中的继承时,你有三个选择:
由于您希望使用一个表来实现它,我建议使用选项2。
您只需要一个User表,USER_TYPE列可以区分用户类型(可以是数字,varchar2等)
然后,您需要使用以下注释创建一个用户类:
如果需要,可以指定DiscriminatorColumn,否则Hibernate将默认为'{className}_TYPE
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="USER_TYPE", discriminatorType=DiscriminatorType.STRING)
public class User { .... }
在具体的类实现中,您可以指定一个Discriminator值(如果不这样做,hibernate会将其默认为类名('TypeAUser'/ 'TypeBUser')
@Entity
@DiscriminatorValue('A')
public class TypeAUser
@Entity
@DiscriminatorValue('B')
public class TypeBUser