有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无附加表的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”项目字段的表

欢迎提出任何意见

致以最良好的祝愿, 斯特凡


共 (2) 个答案

  1. # 1 楼答案

    当谈到Hibernate中的继承时,有三种选择:

    1. 每种混凝土等级的表(带活接头)
    2. 每个类的表层次结构(单表策略)
    3. 每个子类的表

    因为你想用一张桌子来实现它,我建议使用选项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. # 2 楼答案

    如果您不想创建额外的表,那么您可能需要考虑使用^ a1}

    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    public class UserEntity {
    ...
    }
    
    @Entity
    public class TypeAUser extends UserEntity {
    ...
    }
    
    @Entity
    public class TypeBUser extends UserEntity {
    ...
    }