gpt4 book ai didi

hibernate 映射异常 : Repeated column in mapping for entity

转载 作者:行者123 更新时间:2023-12-04 01:45:11 24 4
gpt4 key购买 nike

特定实体存在映射异常。
无法弄清楚问题是从哪里出现的。
我从头到尾检查了所有映射 3 次。
我仍然收到映射异常。

发给员工的电子邮件仅映射一次。
但它仍然报告错误重复映射

错误是:

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.cluster.entity.Email column: EMPLOYEE_ID (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:680)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:702)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:724)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:477)
at org.hibernate.mapping.RootClass.validate(RootClass.java:268)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1287)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1729)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
at com.cluster.util.HibernateUtil.<clinit>(HibernateUtil.java:16)
... 1 more

邮箱 Pojo
package com.cluster.entity;

public class Email {

private int intEmailID;
private String strEmailName;

//many to one
private EmailType emailType;

//many to one
private Employee employee;

public int getIntEmailID() {
return intEmailID;
}

public void setIntEmailID(int intEmailID) {
this.intEmailID = intEmailID;
}

public String getStrEmailName() {
return strEmailName;
}

public void setStrEmailName(String strEmailName) {
this.strEmailName = strEmailName;
}

public EmailType getEmailType() {
return emailType;
}

public void setEmailType(EmailType emailType) {
this.emailType = emailType;
}

public Employee getEmployee() {
return employee;
}

public void setEmployee(Employee employee) {
this.employee = employee;
}

}

email.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'>


<hibernate-mapping package="com.cluster.entity" >
<class name="Email" table="EMAIL">

<id name="intEmailID" column="EMAIL_ID">
<generator class="sequence">
<param name="sequence">EMAIL_ID_SEQ</param>
</generator>
</id>

<property name="strEmailName" column = "EMAIL_NAME"/>

<many-to-one name="employee" column="EMPLOYEE_ID" not-null = "true" class = "Employee"/>

<many-to-one name="emailType" column="EMAIL_TYPE_ID" not-null = "true" class = "EmailType"/>

</class>

</hibernate-mapping>

相关脚本
CREATE TABLE EMPLOYEE
(
EMPLOYEE_ID NUMBER NOT NULL,
FIRSTNAME VARCHAR2(20 BYTE) NOT NULL,
LASTNAME VARCHAR2(20 BYTE) NOT NULL,
DATE_OF_BIRTH VARCHAR2(20 BYTE) NOT NULL,
SALARY VARCHAR2(10 BYTE) NOT NULL,
DEPARTMENT_ID NUMBER NOT NULL
);


CREATE TABLE EMAIL
(
EMAIL_ID NUMBER NOT NULL,
EMAIL_NAME VARCHAR2(40 BYTE) NOT NULL,
EMPLOYEE_ID NUMBER NOT NULL,
EMAIL_TYPE_ID NUMBER NOT NULL
);


CREATE TABLE EMAIL_TYPE
(
EMAIL_TYPE_ID NUMBER NOT NULL,
EMAIL_TYPE_NAME VARCHAR2(40 BYTE) NOT NULL
);


ALTER TABLE EMPLOYEE ADD
(
CONSTRAINT PK_EMPLOYEE_ID
PRIMARY KEY (EMPLOYEE_ID)
);

ALTER TABLE EMAIL_TYPE ADD
(
CONSTRAINT PK_EMAIL_TYPE_ID
PRIMARY KEY (EMAIL_TYPE_ID)
);

ALTER TABLE EMAIL ADD
(
CONSTRAINT PK_EMAIL_ID
PRIMARY KEY (EMAIL_ID)
);

ALTER TABLE EMAIL ADD
(
CONSTRAINT FK_EMAIL_EMPLOYEE_ID
FOREIGN KEY (EMPLOYEE_ID)
REFERENCES EMPLOYEE (EMPLOYEE_ID)
);

ALTER TABLE EMAIL ADD
(
CONSTRAINT FK_EMAIL_EMAIL_TYPE_ID
FOREIGN KEY (EMAIL_TYPE_ID)
REFERENCES EMAIL_TYPE (EMAIL_TYPE_ID)
);

发给员工的电子邮件仅映射一次。
但它仍然报告错误重复映射

最佳答案

您是否将 Employee 中的集合设置为反向?

<bag name="emails" inverse="true">
<key column="EMPLOYEE_ID" not-null="true">
...
</bag>

关于 hibernate 映射异常 : Repeated column in mapping for entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9381029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com