假设我们在某个库中有一个Parent
类:
public abstract class Parent {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
还假设我们在其他一些库中有一个Child
类:
public class Child extends Parent {
}
我想在我的一个实体中使用Child类,例如
@Entity
public class SomeEntity {
// id and other fields
@Embedded
private Child child;
// getters, setters etc.
}
问题是,Parent
中定义的字段未嵌入,即SomeEntity
的相应表格中没有列。
为了确保它是由于继承,我首先向Child
添加了一些字段,并观察到它们是按预期嵌入的。我也尝试直接嵌入Parent,这次也会生成它们的列。
问题是,如何嵌入超类中定义的字段?
我尝试用child
标记SomeEntity
的{{1}}字段,但它不起作用。我还尝试将@Access(AccessType.PROPERTY)
类(即我们示例中的Parent
)中的字段更改为公开,但这也无效。
如果它是相关的,我的项目是name
项目,Spring Boot
作为Hibernate
提供商。任何帮助表示赞赏。
编辑:尝试的JPA
文件如下:
orm.xml
我尝试使用<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<embeddable class="...Child" access="PROPERTY">
<attributes>
<basic name="name">
<column nullable="false"/>
</basic>
</attributes>
</embeddable>
</entity-mappings>
并且没有任何access="FIELD"
参数,但没有运气。
为确保access
已加载,我向orm.xml
提供了无效class
并观察embeddable
,因此已加载。
答案 0 :(得分:0)
引自here,
JPA规范不支持具有继承的可嵌入对象,尽管一些JPA提供程序可能允许这样做。
我猜这是我问题的原因。对JPA感到羞耻。
在对a similar question的回答中,声明:
Hibernate不支持@Embeddable组件的继承。