2017-10-21 44 views
-1
**This is student pojo class** 

@Entity 
@Table(name="student") 
public class Student { 
    @Id 
    private int studentId; 
    private String StudentName; 
    @Embedded 
    private Adress add; 
    @Embedded 
    private Adress temp; 
    public void setTemp(Adress temp) { 
     this.temp = temp; 
    } 
    public void setAdd(Adress add) { 
     this.add = add; 
    } 
    public void setStudentId(int studentId) { 
     this.studentId = studentId; 
    } 
    public void setStudentName(String studentName) { 
     StudentName = studentName; 
    }} 

** this is Address pojo class** 
@Embeddable 
public class Adress { 

    @Column(name="village") 
    private String village; 
    @Column(name="pin") 
    private int pin; 
    public void setVillage(String village) { 
     this.village = village; 
    } 

    public void setPin(int pin) { 
     this.pin = pin; 
    }} 

** Main class ** 

public class Test { 

    public static void main(String[] args) { 

     SessionFactory factory=Sessionfactory.getfactory(); 

     Session session=factory.openSession(); 
     Adress a=new Adress(); 
     a.setPin(123); 
     a.setVillage("kanipakam"); 

     Adress a2=new Adress(); 

     a2.setVillage("kanchi"); 
     a2.setPin(1234); 

     Student s=new Student(); 

     s.setAdd(a); 
     s.setTemp(a2); 


     s.setStudentId(101); 
     s.setStudentName("uday"); 
     Transaction tx=session.beginTransaction(); 
     session.save(s); 

     tx.commit(); 
     System.out.println("object saved"); 
     session.close(); 
     factory.close(); 
     }} 
** showing error** 

插入臨時地址和永久地址由學生組成的關係船在運行這段代碼的下面顯示錯誤,請幫我 異常線程「main」 org.hibernate.MappingException:實體映射中的重複列:com.sathya.pojo.Student列:pin(應映射爲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.checkPropertyColumnDuplication(Persisten tClass.java:727) 在org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:753) 在org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:506) 在org.hibernate.mapping。在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849) at com上的RootClass.validate(RootClass.java:270) at org.hibernate.cfg.Configuration.validate(Configuration.java:1358) 。 sathya.singleton.Sessionfactory.getfactory(Sessionfactory.java:21) 在com.sathya.Test.Test.main(Test.java:16)我有錯誤,而在休眠

回答

0

@Embedded註釋指定從對象字段在同一表中被持久作爲根實體。列的名稱取自@Embeddable配置。所以你的情況

@Embedded 
private Adress add; 
@Embedded 
private Adress temp; 

指定有你的@EntityAdress類型2級的對象。問題是,gived你當前的配置add.villagetemp.village都將被映射到village列的student表。

您有2個選項來解決問題:

  1. 一個(或兩個)@Embedded屬性覆蓋映射,並指定不同的列等記載here
  2. 使用many-to-oneone-to-one關係來處理和存儲地址記錄在一個單獨的數據庫表中。