我对以下问题感到好奇。我有两个实体AB。它存储几乎相同的信息(例如,名称-在现实生活中会更复杂),但是联接和外键有所不同。

我可以做一个没有ID的映射超类。以及class Aclass B扩展了映射的超类,仅包含Id属性?

例如:

import lombok.Getter;
import lombok.Setter;
import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;

@MappedSuperclass
@Getter
@Setter
@Data
class superClass {

    @Column(name = "name")
    private String name;

}

@Entity
@Table(name = "A")
@Data
class A extends superClass {

    @Id
    @OneToMany
    @JoinColumn(name = "id", referencedColumnName = "referencedName")
    private SomeClass id;

}

@Entity
@Table(name = "B")
@Data
class B extends superClass {

    @Id
    @OneToOne
    @JoinColumn(name = "id", referencedColumnName = "referencedName")
    private SomeOtherClass id;

}

JPA是否有效?我确实读过mappedSuperClass的JavaDocs,对此一无所获。我会说这是有效的-但IntelliJ Idea说,超类必须具有Id属性。我在网上找不到任何有关此的信息。

编辑:对不起,我错过了。我在超类上保留了Entity注释,这就是为什么Idea签名错误的原因。我删除了,错误消失了。但是我不确定这是否有效。

最佳答案

是的,它是有效的。无论如何,您的超类将不会在数据库中显示为表。

07-26 09:09