2014-07-07 51 views
0

我有以下異常在執行, 我已經發布使用以及實體。爲什麼我得到這個錯誤? 「在實體映射重複列」

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;  
} 

}

類CustomerTest 包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(); 

} 
} 
+0

你給 「customer_details」 的名字爲兩個欄,1 getCustomerAddress 2.mobileno。這在休眠中是不允許的。 – Amogh

+0

這方面的任何更新? – Amogh

回答

0

你真的必須讀取異常消息! should be mapped with insert="false" update="false"

的問題是,你映射的一個字段多次,這是可能的,如果只是其中一個字段是插入,只有一個是可更新的。這個約束的原因是當hibernate正在保存一個實體時,它必須知道哪個值應該用於更新/插入查詢。

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;  
} 

硫雜會創建兩個表

  1. 客戶:客戶ID,客戶名稱;
  2. customer_Details:客戶ID,MobileNo,customerAddress;