由:org.hibernate.mappingexception引起:实体映射中的重复列:

发布于 2025-01-22 14:21:34 字数 1634 浏览 5 评论 0原文

我有2张与一到许多关系的表,一个表具有复合主键。

表1:key_numbers - 列 - id_unik(主键)和其他列 Table2:key_number_xml - 列 - id_unik_key_number(主键以及由key_numbers表中iD_unik映射的外键),line_number(另一个主要键),数据,数据, 因此,我们有复合主键,其中之一是外键

I有3个Java类 -

  • Keynumber- keynumber- key_numbers Table
  • keynumberxmlbeankey,用于复合主键
  • keynumberxmlbean for Child for Child for Child for Child for Child for Child I类

我在JBOSS EAP Application Server中获得以下错误消息:

引起的是:org.hibernate.mappingException:实体映射中的重复列:keynumberxmlbean列:id_unik_key_number(应用insert = insert =“ false” false“ update” update =“ false”}}} }

我不确定是否在两个类(密钥类和主类)中映射ID_UNIK_KEY_NUMBER。

@Entity
@Table(name = "Key_Numbers")
public class Keynumber implements Serializable {

    private static final long serialVersionUID = 2816559889798956666L;

    @Id
    @GeneratedValue
    @Column(name = "ID_UNIK")
    private Integer id_unik;

    @OneToMany(mappedBy = "keynumber")
    private Set<keynumberXMLBean> keynumberXMLBeans = new HashSet<keynumberXMLBean>(0);


@Embeddable
public class keynumberXMLBeanKey implements java.io.Serializable {

    static final long serialVersionUID = 3206093459760846163L;

    @Column(name = "Line_Number")
    public Integer linenumber;

    @Column(name = "ID_UNIK_Key_Number")
    public Integer idUnikKeyNumber;

@Entity
@Table(name = "Key_Number_xml")
public class keynumberXMLBean {

    @EmbeddedId
    private keynumberXMLBeanKey pk;

    @Column(name = "DATA")
    private String data;

    @ManyToOne
    @JoinColumn(name = "ID_UNIK_Key_Number")
    private Keynumber keynumber;

I have 2 tables with One to Many Relationship and one table has composite primary key.

Table 1: Key_Numbers – Columns - ID_UNIK( Primary Key) and other columns
Table2: Key_Number_xml – Columns - ID_UNIK_Key_Number( Primary key as well Foreign key mapped with ID_UNIK from Key_Numbers table), Line_Number (Another primary Key), Data,
So, we have composite primary key and one of the them is Foreign Key

I have 3 Java classes –

  • Keynumber - Entity Class for Key_Numbers table
  • keynumberXMLBeanKey for composite primary Keys
  • keynumberXMLBean for child class

I am getting the below error message in Jboss EAP application server:

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: keynumberXMLBean column: ID_UNIK_Key_Number (should be mapped with insert="false" update="false")"}}
}

I am not sure should we map ID_UNIK_Key_Number in both classes (Key class and Main class) or not.

@Entity
@Table(name = "Key_Numbers")
public class Keynumber implements Serializable {

    private static final long serialVersionUID = 2816559889798956666L;

    @Id
    @GeneratedValue
    @Column(name = "ID_UNIK")
    private Integer id_unik;

    @OneToMany(mappedBy = "keynumber")
    private Set<keynumberXMLBean> keynumberXMLBeans = new HashSet<keynumberXMLBean>(0);


@Embeddable
public class keynumberXMLBeanKey implements java.io.Serializable {

    static final long serialVersionUID = 3206093459760846163L;

    @Column(name = "Line_Number")
    public Integer linenumber;

    @Column(name = "ID_UNIK_Key_Number")
    public Integer idUnikKeyNumber;

@Entity
@Table(name = "Key_Number_xml")
public class keynumberXMLBean {

    @EmbeddedId
    private keynumberXMLBeanKey pk;

    @Column(name = "DATA")
    private String data;

    @ManyToOne
    @JoinColumn(name = "ID_UNIK_Key_Number")
    private Keynumber keynumber;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

窗影残 2025-01-29 14:21:34

如该错误所述,您将“ ID_UNIK_KEY_NUMBER”列在Keynumberxmlbean Entity中映射了两次,一次在Keynumber Meanto中,第二次在Keynumberxmlbeankey中嵌入了基本的Idunikkeynumber属性。这会导致问题,因为您指定的是控制该列的问题,因此如果它们发生冲突,它不知道该用来设置该值。如错误状态,该解决方案是仅将一个标记为读取(插入= false,false,更新= false)

@Entity
@Table(name = "Key_Number_xml")
public class keynumberXMLBean {

    @EmbeddedId
    private keynumberXMLBeanKey pk;

    @Column(name = "DATA")
    private String data;

    @ManyToOne
    @JoinColumn(name = "ID_UNIK_Key_Number", insertable=false, updatable=false)
    private Keynumber keynumber;
}

。 idunikkeynumber-因此,您的应用程序必须从引用的keynumber.id_unik值设置。当然,如果您同时创建同一交易,而JPA为何衍生ID,则可以将您的关系标记为ID的一部分而不将外键映射为基本列,或者同时使用@mapsid 注释。

假设您仍然需要一个具有值的封装的嵌入式嵌入式ID:

@Entity
@Table(name = "Key_Number_xml")
public class keynumberXMLBean {

    @EmbeddedId
    private keynumberXMLBeanKey pk;

    @Column(name = "DATA")
    private String data;

    @MapsId(value = "idUnikKeyNumber")
    @ManyToOne
    @JoinColumn(name = "ID_UNIK_Key_Number")
    private Keynumber keynumber;
}

这样,JPA将使用该关系来设置Keynumberxmlbean.pk.idunikkeynumber值(以及因此,FK)是从Keynumber中的生成序列为您提供的(post post persist/ post persist/ post persist/冲洗/提交 - 每当它生成序列值时)。

As the error states, you have the "ID_UNIK_Key_Number" column mapped twice in the keynumberXMLBean entity, once within the keynumber ManyToOne, and a second time within the keynumberXMLBeanKey embeddable as a basic idUnikKeyNumber property. This causes problems as you've specified both as controlling that column, so it cannot know which to use to set the value if they conflict. The solution, as the error states, is to mark one as read only (insertable=false, updatable=false)

@Entity
@Table(name = "Key_Number_xml")
public class keynumberXMLBean {

    @EmbeddedId
    private keynumberXMLBeanKey pk;

    @Column(name = "DATA")
    private String data;

    @ManyToOne
    @JoinColumn(name = "ID_UNIK_Key_Number", insertable=false, updatable=false)
    private Keynumber keynumber;
}

Doing this means JPA will pretty much ignore the keynumber reference on write operations, instead populating the FK column using the keynumberXMLBean.pk.idUnikKeyNumber - so your application is required to set it from the referenced keynumber.id_unik value. This of course might be a problem if you are creating both in the same transaction and why JPA has derived IDs, allowing you to mark your relationship as part of the ID without mapping the foreign key as a basic column, or have both with @MapsId annotation.

Assuming you still want an encapsulated embeddedID with the value:

@Entity
@Table(name = "Key_Number_xml")
public class keynumberXMLBean {

    @EmbeddedId
    private keynumberXMLBeanKey pk;

    @Column(name = "DATA")
    private String data;

    @MapsId(value = "idUnikKeyNumber")
    @ManyToOne
    @JoinColumn(name = "ID_UNIK_Key_Number")
    private Keynumber keynumber;
}

With this, JPA will use the relationship to set the keynumberXMLBean.pk.idUnikKeyNumber value (and so the fk) for you from the generated sequence within Keynumber when it needs to (post persist/flush/commit - when ever it would generate the sequence value).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文