user3133845
user3133845

Reputation: 23

Why I got this error?. "Repeated column in mapping for entity"

I have got the below exception while executing, I have posted the entities used as well.

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)

Class Customer

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(); 

} 
}

Upvotes: 0

Views: 1995

Answers (2)

Amogh
Amogh

Reputation: 4573

Your customer class will be :

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 will create two tables

  1. Customer :customerId,customerName;
  2. customer_Details :customerId,MobileNo,customerAddress;

Upvotes: 0

white
white

Reputation: 1922

You REALLY have to read an exception message! should be mapped with insert="false" update="false"

The problem is that you mapped one field several times, which is possible if only one of the fields is insertable, and only one is updatable. The reason for this constraint, is when hibernate is saving an entity, it has to know which value should be used for update/insert query.

Upvotes: 1

Related Questions