使用Hibernate JPA处理超类和子类

时间:2014-04-16 17:32:34

标签: java hibernate inheritance jpa jpa-2.0

我正在尝试使用hibernate JPA将对象保存在数据库中。

对象已经有了类型层次结构,我试图让它与hibernate一起使用。

CatalogPackage对象具有所有重要属性和所有getter。 CatalogPackageImpl(extends CatalogPackage)对象没有属性,但大多数是setter。

@Entity
@Table(name="package")
public class CatalogPackage {

    protected String mId;

    public String getId() {return mId;}
}

public class CatalogPackageImpl extends CatalogPackage {

   public void setId(String id) {
      mId=id;
   }
}

我不知道为什么会这样设置。它应该提供类似界面的设置,因此客户无法修改字段。

我们希望代码引用CatalogPackage对象。但是当试图坚持一系列CatalogPackages(其实就是下面的CatalogPackageImpls)时,hibernate说:

java.lang.IllegalArgumentException:未知实体:com.mycompany.catalog.internal.CatalogPackageImpl

如何在持久化对象时建议休眠它使用超类?

我真的不想将所有的setter移动到超类,我绝对不想使用CatalogPackageImpl作为实体。

1 个答案:

答案 0 :(得分:0)

这样可行,除了以某种方式使CatalogPackageImpl成为实体之外别无他法:

@MappedSuperclass
public class CatalogPackage {
    protected String mId;
    public String getId() {return mId;}
}

@Entity
@Table(name="package")
public class CatalogPackageImpl extends CatalogPackage {
   public void setId(String id) {
      mId=id;
   }
}