Java 如何扩展@实体
这是我的超类Java 如何扩展@实体,java,hibernate,jpa,orm,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
@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;
}
当我试图检索一个对象时,Utenesubclass我得到了以下错误“org.hibernate.util.jdbceptionReporter-未知列'where子句'中的'this..DTYPE'
也许我的“地图系统”错了。我的错误在哪里
提前谢谢。如果您选择使用
单表
继承(这是代码中没有参数的@heritation
注释的默认值),那么您应该将@DiscriminatorColumn
注释添加到超类中(并将@DiscriminatorValue
添加到扩展类中)。否则,通过:
如果未在实体层次结构的根上指定@DiscriminatorColumn,并且需要一个鉴别器列,则持久性提供程序假定默认列名为DTYPE,列类型为DiscriminatorType.STRING
hibernate无法在表中找到此默认列。您可以引入自己的描述符列,或者生成默认的描述符列如果您选择使用
单表
继承(这是代码中没有参数的@heritation
注释的默认值),那么您应该向超类添加@DiscriminatorColumn
注释(和@DiscriminatorValue
扩展类)。否则通过:
如果未在实体层次结构的根上指定@DiscriminatorColumn,并且需要一个鉴别器列,则持久性提供程序假定默认列名为DTYPE,列类型为DiscriminatorType.STRING
hibernate无法在您的表中找到此默认列。您可以引入自己的描述符列,或生成默认列默认情况下,使用的是SINGLE_表,列名为DTYPE,类型为String。我是通过编写“@heritation”来实现的,不是吗?谢谢,伙计,现在它工作了,我错过的是@DiscriminatorColumn和表上的相对字段。不客气!这就是为什么我们都喜欢stackoverflow=)默认情况下使用单表,列名是DTYPE,类型是String。我写了“@heritation”,不是吗?谢谢,现在它工作了,我错过的是@DiscriminatorColumn和表上的相对字段。不客气!这就是为什么我们都喜欢stackoverflow=)看起来您在编辑代码后没有重新生成表结构。在
persistence.xml
中,将选项hibernate.hbm2ddl.auto
设置为update
,然后再次运行。编辑代码后,似乎没有重新生成表结构。在persistence.xml
中,将选项hibernate.hbm2ddl.auto
设置为update
,然后再次运行它。
@Entity
public class UtenteSubClass extends Utente{
@Transient
private String newField;
}