5
我有实质上包含以下类别:休眠不插入DTYPE - 值为null
@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 */
}
我希望休眠默认其存在于user
表中的列DTYPE varchar(31)
使用。当我的代码试图坚持一个新的管理对象我看到以下记录到控制台:
Hibernate: insert into user (email_address) values (?)
Hibernate: insert into admin (role) values (?)
因此没有尝试在Hibernate设置user.DTYPE
列,并在数据库中保持为空。我预计它将被设置为Admin
。
我在做什么错?我也尝试在用户类中明确设置@DiscriminatorColumn
,并在Admin
类中尝试设置@DiscriminatorValue
(并且也尝试向用户添加),但无济于事。
由于我无法在发布后8小时内回答自己的问题,所以在此发帖:思考一些后:我相信这是因为'User'是抽象的。因为没有'User'对象可以直接实例化,所以不需要类型鉴别器,因为类型将提前知道。有人告诉我,如果我错了! – Alex 2013-05-10 12:16:45