2017-10-21 76 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关系来处理和存储地址记录在一个单独的数据库表中。