![](/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.