java - 如何使用每个类继承创建 IDENTITY 主键列?

标签 java hibernate

我想继承多个@Entity s,并且每个都应该按数据库序列增加主键,使用:

id bigint NOT NULL DEFAULT nextval('id_seq'::regclass)

因此我尝试使用 GenerationType.IDENTITY如下:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
    //auto generates the id on database side
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}

@Entity
public class MyEntity extends BaseEntity {

}

结果:

org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for BaseEntity.class

为什么?如何将 id 策略与继承结合使用?

最佳答案

您有多种选择。

您可以使用@MappedSuperclass,而不是使用@Inheritance,我相信您想要完成的事情会很好地工作。

如果您需要@Inheritance,则需要使用基于PROPERTY的注释而不是FIELD并覆盖每个中的getter子类如下:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Override
public Long getId() { ... }

关于java - 如何使用每个类继承创建 IDENTITY 主键列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245100/

相关文章:

java - 如何使 pdf 显示为下载选项而不是在浏览器上呈现?

java - 使用-XX :+PrintHeapAtGC?的GC日志中堆内存地址的含义

java - 如何从正则表达式生成与正则表达式匹配的文本?

java - jackson :如果属性(property)丢失怎么办?

java - 从我的对象中清除 Hibernate 但不要延迟加载

java - JTable 选择改变事件处理 : find the source table dynamically

java - 无法识别java 8 lambda但配置没问题

java - 使用jpa规范时如何在排序中应用合并表达式

java - 将货币值存储为 Doubles 但使用 BigDecimal 计算值

Java Mvc 和 Hibernate