Hibernate + JPA 无法为子类映射不同的 id

Tho*_*ais 2 java hibernate jpa

由于在我开始这个项目之前就存在的原因,有些表的类型相似但 ID 列不同。

所以,当我尝试这个

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Element implements Serializable {
    public String title;
}

@Entity
public class PrimaryElement extends Element {
    @Id
    long pid;
}

@Entity
public class OtherElement extends Element {
    @Id
    long oid;
}
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个明显的错误

No identifier specified for entity: Element
Run Code Online (Sandbox Code Playgroud)

现在,我不能很好地将 ID 放在 Element 类中,因为它们显然映射到不同的列。

我尝试过各种风格的 @Id 和 'abstract' 和 @MappedSuperClass 等等..

我完全不知所措。有没有解决的办法?

任何见解将不胜感激。

谢谢!

Pat*_*ann 5

您可以将 Element 类的 @Entity 和 @Inheritance 批注替换为 @MappedSuperclass(此批注负责技术映射,只有 PrimaryElement 和 OtherElement 将是全功能实体)或将带有 @Id 批注的 oid 字段移动到类Element 并在其子类中使用 @AttributeOverride 注释来修改列名(在这种情况下,抽象类 Element 也将是一个功能齐全的实体)。

@AttributeOverride(name="oid", column=@Column(name="primary_element_id"))
Run Code Online (Sandbox Code Playgroud)

更新:

@MappedSuperclass
public abstract class Element implements Serializable {
    @Id
    private long id;
    public String title;
}

@Entity
@AttributeOverride(name="id", column=@Column(name="pid"))
public class PrimaryElement extends Element {
}

@Entity
@AttributeOverride(name="id", column=@Column(name="oid"))
public class OtherElement extends Element {
}
Run Code Online (Sandbox Code Playgroud)