如何扩展@Entity

时间:2016-03-21 09:48:28

标签: java hibernate jpa orm

这是我的超类

@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'"

可能我的“绘图系统”是错误的。我的错误在哪里?

提前谢谢。

1 个答案:

答案 0 :(得分:4)

如果您选择使用SINGLE_TABLE继承(这是代码中没有参数的@Inheritance注释的默认值),那么您应该向超类添加@DiscriminatorColumn注释(和{{1}扩展类)。否则通过documentation

  

如果未在实体层次结构的根目录中指定@DiscriminatorColumn并且需要使用鉴别器列,则持久性提供程序假定默认列名为DTYPE且列类型为DiscriminatorType.STRING。

hibernate只是在你的表中找不到这个默认列。您可以引入自己的descriminator列,或生成默认列