繁体   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