这是我的超类
@Entity
@Table(name = "utente")
@Component
@Inheritance
public class Utente implements Serializable{
private static final long serialVersionUID = -7124540331184173742L;
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "nome")
@Size(min = 1, max = 20)
@Pattern(regexp="^[A-Za-z 'òàùèéì]*$")
@NotBlank
private String nome;
@Column(name = "cognome")
@Size(min = 1, max = 20)
@Pattern(regexp="^[A-Za-z 'òàùèéì]*$")
@NotBlank
private String cognome;
@Column(name = "email")
@Email
@Size(min = 1, max = 40)
private String email;
@OneToOne(mappedBy = "utente", cascade = CascadeType.ALL)
@Valid
private Autenticazione autenticazione;
@OneToMany(mappedBy = "utente", fetch = FetchType.EAGER, orphanRemoval=true, cascade=CascadeType.ALL)
private List<Autorizzazioni> autorizzazioniLista;
}
这是扩展上述类的类:
@Entity
public class UtenteSubClass extends Utente{
@Transient
private String newField;
}
当我尝试检索对象 UtenteSubClass 时,我收到此错误"org.hibernate.util.JDBCExceptionReporter - Unknown column 'this_.DTYPE' in 'where clause'"
。
可能我的“绘图系统”是错误的。我的错误在哪里?
提前谢谢。
答案 0 :(得分:4)
如果您选择使用SINGLE_TABLE
继承(这是代码中没有参数的@Inheritance
注释的默认值),那么您应该向超类添加@DiscriminatorColumn
注释(和{{1}扩展类)。否则通过documentation:
如果未在实体层次结构的根目录中指定@DiscriminatorColumn并且需要使用鉴别器列,则持久性提供程序假定默认列名为DTYPE且列类型为DiscriminatorType.STRING。
hibernate只是在你的表中找不到这个默认列。您可以引入自己的descriminator列,或生成默认列