在所有字段

时间:2017-06-05 21:57:07

标签: java spring hibernate jpa

假设我们在某个库中有一个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,因此已加载。

1 个答案:

答案 0 :(得分:0)

引自here

  

JPA规范不支持具有继承的可嵌入对象,尽管一些JPA提供程序可能允许这样做。

我猜这是我问题的原因。对JPA感到羞耻。

在对a similar question的回答中,声明:

  

Hibernate不支持@Embeddable组件的继承。