问题描述
特定实体存在映射例外。
不知道问题出在哪里。
我从开始到结束检查了所有映射3次。
仍然收到映射异常。
发送给员工的电子邮件只映射一次。
但是仍然报告错误重复映射
错误是:
$ b $
code>引起:org.hibernate.MappingException:实体映射中的重复列:com.cluster.entity.Email列:EMPLOYEE_ID(应该使用insert =falseupdate =false映射)
在org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:680)
位于org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:702)
位于org.hibernate.mapping。 PersistentClass.checkColumnDuplication(PersistentClass.java:724)
在org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:477)
在org.hibernate.mapping.RootClass.validate(RootClass.java:
at org.hibernate.cfg.Configuration.validate(Configuration.java:1287)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1729)
at org.hibernate.cfg.Configuration.buildSessionFactory .hibernate.cfg.Configuration.buildSessionFactory(Configuratio < clinit>(HibernateUtil.java:16)
... 1 more
n.java:1775)
at com.cluster.util.HibernateUtil。< clinit>
$ p $ package com.cluster.entity;
公共类电子邮件{
private int intEmailID;
私人字符串strEmailName;
//多对一
私人EmailType emailType;
//多对一
私人员工雇员;
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.0encoding =UTF-8?>
<!DOCTYPE hibernate-mapping PUBLIC
' - // Hibernate / Hibernate映射DTD 3.0 // EN'
'http://www.hibernate.org/dtd/hibernate-mapping -3.0.dtd'>
< hibernate-mapping package =com.cluster.entity>
< class name =Emailtable =EMAIL>
< id name =intEmailIDcolumn =EMAIL_ID>
< generator class =sequence>
< param name =sequence> EMAIL_ID_SEQ< / param>
< / generator>
< / id>
< property name =strEmailNamecolumn =EMAIL_NAME/>
< / 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中的集合设置为inverse?
< bag name =emailsinverse =true>
< key column =EMPLOYEE_IDnot-null =true>
...
< / bag>
There is a mapping exception for a particular entity.Cant figure out from where the problem is arising.I checked all the mappings 3 times from start to end.Still i am getting a Mapping Exception.
Email to employee is mapped only once.but still it is reporting the error repeated mapping
Error is:
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
Email 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>
Related Script
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)
);
Email to employee is mapped only once.but still it is reporting the error repeated mapping
have you set the collection in Employee as inverse?
<bag name="emails" inverse="true">
<key column="EMPLOYEE_ID" not-null="true">
...
</bag>
这篇关于Hibernate映射例外:为实体映射重复列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!