Hibernate继承映射未知属性

时间:2015-11-27 14:11:04

标签: java hibernate inheritance one-to-one mappedsuperclass

我正在努力继承我的继承结构,我有一个映射的超类,它包含具体类中的公共字段。这个超类与一个"包装器#34;进行一对一的映射。宾语。

对象看起来像这样;

undef

为简单起见,我只包括一个具体的课程,但我有几个。

当我没有引用" Base"在包装器对象中。一旦我尝试添加包装器和基座之间的双向关系,我就会开始出现这个错误......当字段存在时,它没有意义。

@Entity
public class Wrapper {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "wrapper_id", nullable = false)
    private Long wrapperId;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "wrapper")
    @Cascade(CascadeType.SAVE_UPDATE)
    private Base base;

    public Long getWrapperId() {
        return wrapperId;
    }

    public void setWrapperId(Long wrapperId) {
        this.wrapperId = wrapperId;
    }

    public Base getBase() {
        return base;
    }

    public void setBase(Base base) {
        this.base = base;
    }

}

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Base {

    @OneToOne(fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    @JoinColumn(name = "wrapper_id")
    protected Wrapper wrapper;

    public Wrapper getWrapper() {
        return wrapper;
    }

    public void setWrapper(Wrapper wrapper) {
        this.wrapper = wrapper;
    }

}

@Entity
public class SubA extends Base {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "sub_a_id", nullable = false)
    private Long subAId;

    public Long getSubAId() {
        return subAId;
    }

    public void setSubAId(Long subAId) {
        this.subAId = subAId;
    }

}

我错过了什么? 谢谢,

2 个答案:

答案 0 :(得分:3)

引用Java平台企业版:Java EE教程:

  

37.2.2映射超类

     

实体可以从包含持久状态的超类继承   和映射信息但不是实体。也就是说,超类   未使用@Entity注释进行修饰,并且未将其映射为   Java Persistence提供者提供的实体。这些超类是最多的   通常在您拥有常见的状态和映射信息时使用   多个实体类。映射的超类由。指定   用注释装饰类   javax.persistence.MappedSuperclass:

     

...

     

无法查询映射的超类,也无法使用   EntityManager或Query操作。您必须使用的实体子类   EntityManager或Query操作中映射的超类。的映射   超类不能成为实体关系的目标。

所以看起来你不能在实体关系中使用这个Base类:

@OneToOne(fetch = FetchType.LAZY, mappedBy = "wrapper")
@Cascade(CascadeType.SAVE_UPDATE)
private Base base;

答案 1 :(得分:0)

看起来像这个hibernate错误:Hibernate complains about an unknown mappedBy property when mapping a bidirectional OneToOne relation with a derived identifier,仅在hibernate 4.2.2,4.3.0.Beta3版本中修复。