java - 如何从映射的父类(super class)继承@Id?

标签 java hibernate

我想创建一个主组合键并使用父类中的@Id字段。但这不起作用。为什么?

@MappedSuperclass
static abstract class SuperEntity {
    @Id
    private Long id;
}

@Entity
@IdClass(SuperPK.class)
public static class ChildEntity extends SuperEntity {
    @Id
    private String lang;
}


public class SuperPK {
    public SuperPK(Long id, String lang) {
        //...
    }
}

结果:在实体ChildEntity中找不到@IdClass的属性:id

最佳答案

我发现了一个open issue关于这个错误。

其中一条注释指出,作为一种解决方法,可以覆盖 ID 属性的 getter。

@Entity
@IdClass(SuperPK.class)
public static class ChildEntity extends SuperEntity {
    @Id
    private String lang;

    @Override @Id
    public Long getId() {
        return super.getId();
    }
}

关于java - 如何从映射的父类(super class)继承@Id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158098/

相关文章:

java - 集成测试在 gradle 测试中失败,但在 IDE 中通过

java - 如何在我的 java 项目中引用 Maven 依赖项的单元测试类?

mysql - Hibernate 多重连接

java - 无法使用 spring JpaRepository 持久保存数据

hibernate - 使用Hibernate 4生成SQL DB创建脚本

java - 如何在 hibernate 中记录失败的sql?

java - 以下代码中无限 for 循环的目的是什么

java - (AdapterView<?> parent, View view, int position, long id) <?> 符号有什么作用?

java - C++ 与 Java 内存化差异

java - 用于多线程应用程序的 Hibernate getOrCreate 模式