基本的に次のクラスがあります。
@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 はデフォルトでテーブルDTYPE varchar(31)
に存在する列を使用することを期待していuser
ます。私のコードが新しい管理オブジェクトを永続化しようとすると、コンソールに次のログが記録されます。
Hibernate: insert into user (email_address) values (?)
Hibernate: insert into admin (role) values (?)
したがって、Hibernate はuser.DTYPE
列を設定しようとせず、データベース内で NULL のままになります。に設定されると予想していましたAdmin
。
私は何を間違っていますか?@DiscriminatorColumn
また、 User クラスとクラスを明示的に設定しようと@DiscriminatorValue
しましたAdmin
(また、 User にも追加しようとしました)が、役に立ちませんでした。