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** 

lors de l'exécution de ce code ci-dessous son show erreur s'il vous plaît aidez-moi Exception dans le thread « principal » org.hibernate.MappingException: Colonne répétée dans le mappage de l'entité: colonne com.sathya.pojo.Student: pin (doit être mappée avec insert = "false" update = "false") sur org.hibernate.mapping.PersistentClass.checkColumnDuplication (PersistentClass.java:709) à org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:731) à 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. RootClass.validate (RootClass.java:270) à org.hibernate.cfg.Configuration.validate (Configuration.java:1358) à org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1849) à com. sathya.singleton.Sessionfactory.getfactory (Sessionfactory.java:21) à com.sathya.Test.Test.main (Test.java:16)Je suis erreur lors de l'insertion adresse temporaire et l'adresse permanente à l'étudiant par navire relation de composition mise en veille prolongée

Répondre

0

annotation @Embedded spécifie que les zones de l'objet sont conservées dans le même tableau en tant qu'entité racine. Les noms des colonnes proviennent de la configuration @Embeddable. Donc, dans votre cas

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

Indique qu'il ya 2 objets de type Adress sur votre @Entity. Le problème est que donné votre configuration actuelle add.village et temp.village les deux seront mappés à la colonne village du tableau student.

Vous avez 2 options pour résoudre le problème:

  1. applications de remplacement pour un (ou les deux) @Embedded propriétés et spécifier des colonnes comme décrit here
  2. Utilisez many-to-one ou one-to-one relation pour traiter et registres d'adresses de magasin dans une table de base de données séparée.