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