2016-08-20 1 views
2

Pourquoi le code ci-dessous est en train d'obtenir une erreur mais le code similaire fonctionne dans mon projet. Pourquoi j'obtiens la colonne de table invalide pour les champs.Hibernate table invalide colonne

Entités: Adresse

public class Address implements Serializable { 
    private int mNumber; 
    private String mName;  
    public int getNumber() { 
     return mNumber; 
    }  
    public Address() { 
     // TODO Auto-generated constructor stub 
    }  
    public Address(int pNumber, String pName) { 
     // TODO Auto-generated constructor stub 
     System.out.println("hello"); 
    }  
    public void setNumber(int pNumber) { 
     mNumber = pNumber; 
    }  
    public String getName() { 
     return mName; 
    } 
    public void setName(String pName) { 
     mName = pName; 
    } 
} 

étudiant

public class Student { 
    private String mSname; 
    private Address id;  
    public String getSname() { 
     return mSname; 
    }  
    public void setSname(String pSname) { 
     mSname = pSname; 
    }  
    public Address getId() { 
     return id; 
    }  
    public void setId(Address pId) { 
     id = pId; 
    }  
} 

fichiers de mappage:

Student.hbm.xml

<hibernate-mapping> 
    <class name="com.hibernate.compositeid.Student" table="student24"> 
     <composite-id name="id" class="com.hibernate.compositeid.Address"> 
      <key-property name="Number" column="number" /> 
      <key-property name="Name" column="name" /> 
     </composite-id> 
     <property name="Sname" column="sname" /> 
    </class> 
</hibernate-mapping> 

classe Test:

public class Test { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     SessionFactory sf = new Configuration().configure(
       "com/hibernate/compositeid/hibernate.cfg.xml") 
       .buildSessionFactory(); 
     Session ss = sf.openSession(); 

     Address ad = new Address(); 
     ad.setName("krishnanagar"); 
     ad.setNumber(1234); 
     Student s = new Student(); 
     s.setSname("nani"); 
     s.setId(ad); 
     ss.save(s); 
     ss.beginTransaction().commit(); 
    } 

} 
+0

Quel genre d'erreur avez-vous reçu? – Khodabakhsh

Répondre

1

Le problème se situe dans le nom des attributs du fichier Student.hbm.xml. Il devrait être comme suit:

<hibernate-mapping> 
    <class name="com.hibernate.compositeid.Student" table="student24"> 
     <composite-id name="id" class="com.hibernate.compositeid.Address"> 
      <key-property name="mNumber" column="number" /> 
      <key-property name="mName" column="name" /> 
     </composite-id> 
     <property name="mSname" column="sname" /> 
    </class> 
</hibernate-mapping> 

J'espère que la colonne que vous avez fournie est la même que celle de votre base de données.

+0

HIbernate considèrera valeur de l'attribut name pour appeler la méthode setter. Il n'est pas nécessaire que le nom de la variable de classe et la valeur de l'attribut name correspondent. – Pani

0

si vous utilisez la base de données MySQL utilisent la configuration d'annotation ci-dessous sinon changer de stratégie = « incerment »

public class Address implements Serializable { 

    @Id 
    @GenericGenerator(name = "j", strategy = "increment") 
    @GeneratedValue(generator = "j") 
    @Column(name = "number") 
      private int mNumber; 
    @Column(name = "name") 
      private String mName;  


      public int getNumber() { 
       return mNumber; 
      }  
      public Address() { 
       // TODO Auto-generated constructor stub 
      }  
      public Address(int pNumber, String pName) { 
       // TODO Auto-generated constructor stub 
       System.out.println("hello"); 
      }  
      public void setNumber(int pNumber) { 
       mNumber = pNumber; 
      }  
      public String getName() { 
       return mName; 
      } 
      public void setName(String pName) { 
       mName = pName; 
      } 
     } 
+0

Bonjour, Le programme ci-dessus fonctionne très bien. Après redémarrage mon éclipse – Pani