我有一个 pojo 类地址,我正在尝试构建一个数据库表,其中应该有不同的家庭地址和办公室地址。我正在使用 AttributeOverride 注释来使地址类分别显示办公室地址和家庭地址的属性,但是我遇到了以下问题。 线程“main”org.hibernate.MappingException 中出现异常:实体映射中的重复列:org.blogPost.Employee 列:CITY_NAME(应使用 insert="false"update="false"进行映射)
请查看下面的代码并提出正确的修复建议。
主类。
package org.blogPost;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class TestEmployee {
public static void main(String[] args) {
SessionFactory sessionfactory = new
AnnotationConfiguration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();
session.beginTransaction();
Date date= new Date();
Employee emp1= new Employee();
Address addr= new Address();
Address home_addr= new Address();
addr.setStreet("This is a test street");
addr.setCity("test city");
addr.setPincode("test Pin");
home_addr.setStreet("Home Street Test");
home_addr.setCity("Home test home");
home_addr.setPincode("Test_home pin");
//emp1.setEmpId(101);
emp1.setEmpName("Employee five");
emp1.setEmpLastName("Employee five SirName");
emp1.setNumber(7755);
emp1.setEmail("emp55@hibernate.com");
emp1.setAddress(home_addr);
emp1.setOfficeAddress(addr);
emp1.setEmpLoginTime(date);
session.save(emp1);
session.getTransaction().commit();
emp1= null;
session=sessionfactory.openSession();
session.beginTransaction();
emp1=(Employee)session.get(Employee.class, 1);
System.out.println("Below is the user details");
System.out.println("Employee ID : "+emp1.getEmpId());
System.out.println("Employee Name : "+emp1.getEmpName());
System.out.println("Employee Address : "+emp1.getAddress());
System.out.println("Employee email ID : "+emp1.getEmail());
}
}
我面临问题的员工类(class)。
block 引用>package org.blogPost; import java.util.Date; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EmployeeInfo") public class Employee { private int empId; private String empName; private String empLastName; private long number; private String email; private Date empLoginTime; private Address address; @AttributeOverrides({ @AttributeOverride (name="street",column=@Column(name="HOME_STREET_ADDRESS")), @AttributeOverride (name="city",column=@Column(name="HOME_CITY_ADDRESS")), @AttributeOverride (name="pincode",column=@Column(name="HOME_PIN_CODE")) }) private Address officeAddress; @Id @GeneratedValue(strategy=GenerationType.TABLE,generator="empID") @TableGenerator(name="empID",table="empPrimaryKey",pkColumnName="empKey",pkColumnValue="empValue",allocationSize=1) @Column(name="EmployeeId",nullable=false) public int getEmpId() { return empId; } public void setEmpId(int empId) { this.empId = empId; } @Column(name="First_Name",nullable=false) public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } @Column(name="Last_Name",nullable=false) public String getEmpLastName() { return empLastName; } public void setEmpLastName(String empLastName) { this.empLastName = empLastName; } @Column(name="Phone_number") public long getNumber() { return number; } public void setNumber(long number) { this.number = number; } @Column(name="Email_Address",nullable=false) public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Temporal(TemporalType.TIMESTAMP) public Date getEmpLoginTime() { return empLoginTime; } public void setEmpLoginTime(Date empLoginTime) { this.empLoginTime = empLoginTime; } @Embedded public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Embedded public Address getOfficeAddress() { return officeAddress; } public void setOfficeAddress(Address officeAddress) { this.officeAddress = officeAddress; } }
地址类别。 包 org.blogPost;
import javax.persistence.Column; import javax.persistence.Embeddable; @Embeddable public class Address { private String street; private String city; private String pincode; @Column(name="STREET_NAME") public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } @Column(name="CITY_NAME") public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Column(name="PIN_CODE") public String getPincode() { return pincode; } public void setPincode(String pincode) { this.pincode = pincode; } }
下面是我运行代码时遇到的异常。
Exception in thread "main" org.hibernate.MappingException: Repeated column in mapping for entity: org.blogPost.Employee column: CITY_NAME (should be mapped with insert="false" update="false") at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:670) at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:692) at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:688) at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:714) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468) at org.hibernate.mapping.RootClass.validate(RootClass.java:215) at org.hibernate.cfg.Configuration.validate(Configuration.java:1149) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1334) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at org.blogPost.TestEmployee.main(TestEmployee.java:12)
最佳答案
请在 getter 方法(public Address getOfficeAddress())上保留 @AttributeOverrides 注解,就像在其他成员变量的 getter 方法(public int getEmpId())上使用注解一样。它会起作用的。
关于java - 实体映射中的重复列应使用插入 ="false"更新 ="false"进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663715/