无附加表的java JPA实体继承
我正在从事一个基于Spring、JPA和Hibernate的Maven Java web项目
该项目的一部分应在另一个非常类似的项目中重复使用,因此提取为Maven模块。此服务和相应实体的注释如下:
@Service
public class MessageService
@Entity
public class Message
两个项目都有相似但略有不同的用户实体
@Entity
public class TypeAUser
@Entity
public class TypeBUser
消息实体与每个项目中的一个用户实体具有@OneToMany关系
我考虑了一个通用的UserEntity,但希望避免创建额外的表以及带有“other”项目字段的表
欢迎提出任何意见
致以最良好的祝愿, 斯特凡
# 1 楼答案
当谈到Hibernate中的继承时,有三种选择:
因为你想用一张桌子来实现它,我建议使用选项2
您只需要一个用户表,其中有一个User_TYPE列来区分用户类型(可以是数字、varchar2等)
然后,您需要创建一个带有以下注释的类User: 如果需要,可以指定DiscriminatorColumn,否则Hibernate将默认为
'{className}_TYPE
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="USER_TYPE", discriminatorType=DiscriminatorType.STRING) public class User { .... }
在具体的类实现中,可以指定一个鉴别器值(如果不指定,hibernate会将其默认为类名^{)
@Entity @DiscriminatorValue('A') public class TypeAUser @Entity @DiscriminatorValue('B') public class TypeBUser
# 2 楼答案
如果您不想创建额外的表,那么您可能需要考虑使用^ a1}