【发布时间】:2013-05-10 11:13:13
【问题描述】:
我基本上有以下课程:
@Entity
@Table( name="user" )
@Inheritance( strategy = InheritanceType.JOINED )
public abstract class User implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@Column( name = "id" )
private Long id;
@Column( name = "email_address" )
private String emailAddress;
/* getters and setters not shown */
}
和
@Entity
@Table( name="admin" )
public class Admin extends User implements Serializable
{
private static final long serialVersionUID = 1L;
@Column( name = "role" )
private String role;
/* getters and setters not shown */
}
我希望 Hibernate 默认使用存在于 user 表中的列 DTYPE varchar(31)。当我的代码尝试保留一个新的 Admin 对象时,我看到以下记录到控制台:
Hibernate: insert into user (email_address) values (?)
Hibernate: insert into admin (role) values (?)
因此,Hibernate 没有尝试设置 user.DTYPE 列,并且它在数据库中保持为 NULL。我预计它会设置为Admin。
我做错了什么?我还尝试在 User 类上显式设置 @DiscriminatorColumn,在 Admin 类上显式设置 @DiscriminatorValue(也尝试添加到 User 中),但无济于事。
【问题讨论】:
-
发帖后的 8 小时内我无法回答自己的问题,因此发帖:再想一想:我相信这是因为
User是抽象的。因为没有User对象可以直接实例化,所以不需要类型鉴别器,因为类型会提前知道。如果我错了,请告诉我!
标签: hibernate inheritance jpa