@Entity
@Table(name = "PERSON")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Person {
@Id
@GeneratedValue
@Column(name = "PERSON_ID")
private Long personId;
@Column(name = "FIRSTNAME")
private String firstname;
@Column(name = "LASTNAME")
private String lastname;
// Constructors and Getter/Setter methods,
}
员工类扩展了Person
@Entity
public class Employee extends Person {
@Transient
private Date joiningDate;
// Copy Constructors and Getter/Setter methods,
}
Employee类只有一个临时对象所以我不确定使用@DiscriminatorColumn和@DiscriminatorValue,当我尝试不使用Discriminator抛出错误
session.save(employee);
我正在尝试保存在'字段列表'错误中抛出未知列'DTYPE'的Employee对象
您应该使用@DiscriminatorColumn和@DiscriminatorValue。你可以找到一个很好的例子here。
我使用EclipseLink遇到了同样的问题,我尝试使用@discriminator注释...但没有成功,因为在此解决方案中,必须在2个表中添加特定列。
我没有可能在表中添加列,所以我找到了以下解决方案:
@Entity
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Person {
我刚刚将继承类型从SINGLE_TABLE更改为TABLE_PER_CLASS
我在Thoughts on Java找到了有用的解释
仅供参考,我的2个表实际上是1个表,同一个表上的视图有2个或3个连接。