簡體   English   中英

應該映射為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=falseupdtable=false )之后,hibernate知道應該使用哪些值進行更新/插入,因為只有唯一的事實來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM