Hibernate - 在一个表中添加两个类

时间:2017-04-12 11:42:47

标签: java mysql hibernate

如何使用Hibernate在一个表中添加基类和后代类?

基础课

 public class Id{

 protected int id
 }

后裔类

 public classs User exetends Id{
 public String username;
 public String password;
 }

在一个表USERS中具有属性:id,username,password。

2 个答案:

答案 0 :(得分:0)

首先,您需要使用@Entity标记它们以表明它们是表格,然后在顶层设置表格名称@Table。要使用继承,您需要选择策略:对于此实例,您需要SINGLE_TABLE。然后,为了选择正确的类型,需要@DiscriminatorColumn,设置列名和鉴别器的类型 - 在这种情况下,我选择了 INTEGER 。您还需要添加类型注释updatable = false和insertable = false,以便不能修改它们。

@Entity
@Table(name = "TABLE_NAME")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE",discriminatorType = DiscriminatorType.INTEGER)
public class Id {

    @Column(name="TYPE", insertable=false, updatable=false)
    private Integer type;

}

在子类上,您需要使用@Entity@DiscriminatorValue(在本例中为1)标记它们。

@Entity
@DiscriminatorValue(value = "1")
public classs User exetends Id{

    public String username;
    public String password;

}

答案 1 :(得分:0)

根据我的理解。

您希望拥有Base个实体。并且Base实体应该由其他Descendant实体扩展。换句话说,Descendant应该具有Base实体的所有属性。此设计的一个用例是为Descendant实体类中的所有Base类提供公共属性(id,createdDate,updatedDate)。

一种方法是:

  

BaseEntity(基类)

@MappedSuperclass
public class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    //..setter and getters
}
  

用户(后代类)

@Entity
@Table(name = "user")
public class User extends BaseEntity {

    @Column(name = "name")
    private String name; //User specific properties

    //..setters and getters here
}