![](/img/trans.png)
[英]Repeated column in mapping for entity should be mapped with insert=“false” update=“false”
[英]should be mapped with insert=“false” update=“false”
我参加了下两节课:
@Entity
@Table(name="questions")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="is_sponsered")
@SequenceGenerator(name="id_seq")
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="id_seq")
protected int id;
@Column(name="is_sponsered",nullable=false)
protected boolean sponsered=false;
....}
和一个子类:
@Entity
@DiscriminatorValue("true")
public class SP extends Question{
public SP(String q)
{
super(q);
this.sponsered=true;
}
但是,我遇到下一个错误:
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: SP column: is_sponsered
据我了解,当我们具有OneToMany关系时,经常使用insertable = false和updatble = false。 在这种情况下,它只是继承。 将insertabl = false,updtable = false添加到在Question类中响应的列时,不会出现错误。 我想知道为什么。
当需要映射鉴别符列时,必须使用insert="false" update="false"
映射它,因为只有Hibernate才能管理该列。 如果不映射该列,则出于内部目的,Hibernate会将其视为已声明一次。 如果声明它,那是两次,因此是错误。
这是因为@DiscriminatorValue
已经映射了SP
sponsered
列,该值应始终等于“ true”。
如果您两次将sponsered
列映射为update / insert,则Hibernate会感到困惑,因为它不知道应将哪些值用于update / insert。 但是在将sponsered
列更改为只读模式(即insertabl=false
, updtable=false
)之后,hibernate知道应该使用哪些值进行更新/插入,因为只有唯一的事实来源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.