如何在hibernate中保持子类中的超类变量?

kdu*_*idy 5 java hibernate

我想仅从子类中将所有变量保存在超类中

例:

//This class is from an API, I cannot touch or change
class SuperClass {
    private String name;
    private String info;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

@Entity
class ChildClass extends SuperClass {
    @id
    private long id;
}
Run Code Online (Sandbox Code Playgroud)

我希望表有这些列(id,name,info)

它可行吗?如果是,怎么样?

man*_*ish 5

如果访问器未设置为final超类,则可以在子类中覆盖它们,并将JPA注释添加到重写的访问器方法中.

例1


class SuperClass { public String getName() { ... } public String getInfo() { ... }

@Entity
class ChildClass extends SuperClass {
  @Id
  private long id;

  public Long getId() { return id; }

  @Access(AccessType.PROPERTY)
  @Column(name = "name")
  public String getName() { return super.getName(); }

  @Access(AccessType.PROPERTY)
  @Column(name = "info")
  public String getInfo() { return super.getInfo(); }
}
Run Code Online (Sandbox Code Playgroud)

例2


class SuperClass { public String getName() { ... } public String getInfo() { ... }

@MappedSuperClass
class NamedModel extends SuperClass {
  @Access(AccessType.PROPERTY)
  @Column(name = "name")
  public String getName() { return super.getName(); }

  @Access(AccessType.PROPERTY)
  @Column(name = "info")
  public String getInfo() { return super.getInfo(); }
}

@Entity
class ChildClass extends NamedModel {
  @Id
  private long id;
}
Run Code Online (Sandbox Code Playgroud)

我使用您的代码创建了一个示例应用程序.下载应用程序并运行集成测试,mvn clean test并检查生成的SQL以查看所需的结果.