为什么我收到这个错误? "实体映射中的重复列"

时间:2014-07-07 15:39:50

标签: java hibernate

我执行时遇到以下异常, 我也发布了使用的实体。

Exception in thread "main" org.hibernate.MappingException: Repeated column in mapping for entity: com.hybernate.chapter2.Customer column: customer_details (should be mapped with insert="false" update="false")
            at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:709)
            at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:731)
            at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:753)
            at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:506)
            at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
            at org.hibernate.cfg.Configuration.validate(Configuration.java:1358)
            at org.hibernate.cfg.Configuration.buil
            dSessionFactory(Configuration.java:1849)
                at com.hybernate.chapter2.CustomerTest.main(CustomerTest.java:20)

班级客户

package com.hybernate.chapter2;

import javax.persistence.Column; 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SecondaryTable; 
import javax.persistence.Table;
import javax.persistence.TableGenerator; 

@Entity
@Table(name="Customer") @SecondaryTable(name="customer_Details")
public class Customer {     
private String customerName;        
private String customerId;      
private String customerAddress;         
private String MobileNo;    

public String getCustomerName() {       
return customerName;    
}   

public void setCustomerName(String customerName) {
        this.customerName = customerName;   }   

@Id
//@TableGenerator(name="customerID",initialValue=1,pkColumnName="customerId",pkColumnValue="customerValue",allocationSize=1,table="cust_PK")
@GeneratedValue     
public String getCustomerId() {         
return customerId;
}   

public void setCustomerId(String customerId) {      
this.customerId = customerId;   
}   

@Column(name="customer_details")    
public String getCustomerAddress() {        
return customerAddress;     
}   

public void setCustomerAddress(String customerAddress) {        
this.customerAddress = customerAddress;     
}   

@Column(name="customer_details")    
public String getMobileNo() {       
return MobileNo;    
}   
public void setMobileNo(String mobileNo) {      
MobileNo = mobileNo;    
}   

}

Class CustomerTest     package com.hybernate.chapter2;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CustomerTest { 

public static void main(String args[]) {
    Configuration config=new Configuration();
    config.addAnnotatedClass(Customer.class);
    //config.addAnnotatedClass(customer_Details.class);
    config.configure("hibernate.cfg.xml");  
    new SchemaExport(config).create(true,true);     
    ServiceRegistry serviceRegistry = new     
    StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();     
    SessionFactory factory = config.buildSessionFactory(serviceRegistry);   
    Session session=factory.getCurrentSession();    
    session.beginTransaction();
    Customer c2=new Customer();     
    c2.setCustomerName("sss");
    c2.setCustomerAddress("kkk");   
    c2.setMobileNo("87654");
    session.save(c2);   
    session.getTransaction().commit(); 

} 
}

2 个答案:

答案 0 :(得分:0)

您真的必须阅读异常消息! should be mapped with insert="false" update="false"

问题是你多次映射一个字段,如果只有一个字段是可插入的,那么这是可能的,只有一个是可更新的。这种约束的原因是,当hibernate保存一个实体时,它必须知道哪个值应该用于更新/插入查询。

答案 1 :(得分:0)

您的客户类将是:

package com.hybernate.chapter2;

import javax.persistence.Column; 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SecondaryTable; 
import javax.persistence.Table;
import javax.persistence.TableGenerator; 

@Entity
@Table(name="Customer") @SecondaryTable(name="customer_Details")
public class Customer {     
private String customerName;        
private String customerId;      
private String customerAddress;         
private String MobileNo;    

public String getCustomerName() {       
return customerName;    
}   

public void setCustomerName(String customerName) {
        this.customerName = customerName;   }   

@Id
@GeneratedValue(strategy = GenerationType.AUTO)     
public String getCustomerId() {         
return customerId;
}   

public void setCustomerId(String customerId) {      
this.customerId = customerId;   
}   

@Column(table="customer_details")    
public String getCustomerAddress() {        
return customerAddress;     
}   

public void setCustomerAddress(String customerAddress) {        
this.customerAddress = customerAddress;     
}   

@Column(table="customer_Details")    
public String getMobileNo() {       
return MobileNo;    
}   
public void setMobileNo(String mobileNo) {      
MobileNo = mobileNo;    
}   

Thia将创建两个表

  1. 客户:customerId,customerName;
  2. customer_Details:customerId,MobileNo,customerAddress;