我对以下问题感到好奇。我有两个人,A
和B
。它存储几乎相同的信息(例如,名称 - 在现实生活中它更复杂),但连接和外键不同。
我可以在没有Id的情况下执行映射的超类。 class A
和class 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签署错误的原因。我删除了,错误消失了。但我不确定,这是有效的。
答案 0 :(得分:2)
是的,没有要求MappedSuperclass包含任何内容。它只是为子类提供了额外的注释。
答案 1 :(得分:1)
是的,它是有效的。无论如何,您的超类不会在数据库中显示为表格。