2016-04-17 15 views
1

Ich habe eine einfache Webanwendung entwickelt, die über Hibernate mit MySQL verbunden ist. Irgendwann war es mir sogar gelungen, eine Verbindung herzustellen und das Java-Objekt in die DB einzufügen. Allerdings habe ich danach einige Änderungen vorgenommen, um meine Projektanforderungen zu erfüllen und da habe ich die Dinge durcheinander gebracht. Ich erhalte den Fehler "Kein Identifikator für die Entität angegeben", egal wie sehr ich versuche, ihn zu debuggen. Ich habe sogar ein neues Projekt von Grund auf erstellt, aber vergeblich. Bitte helfen Sie mir hier, herauszufinden, was ich falsch mache.Hibernate: Kein Bezeichner für Entität

package com.proj.beandb; 

    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.SessionScoped; 
    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.Id; 
    import javax.persistence.Table; 

    import org.hibernate.Session; 
    import org.hibernate.SessionFactory; 
    import org.hibernate.cfg.Configuration; 

    @ManagedBean 
    @SessionScoped 
    @Entity 
    @Table(name="dbstat") 
    public class Hibernate 
    { 
    @Id 
    @Column(name="first_name") 
    private static String fname; 

@Column(name="last_name") 
private static String lname; 

    public Hibernate(){} 

    public Hibernate(String fname, String lname) 
     { 
     Hibernate.fname = fname; 
     Hibernate.lname = lname; 
     } 

     public static void main(String[] args) { 

      // create session factory 
      SessionFactory factory = new Configuration().configure("hibernate.cfg.xml") 
           .addAnnotatedClass(Student.class) 
           .buildSessionFactory(); 

      // create session 
      Session session = factory.getCurrentSession(); 

      try {  
       // create a student object 
       System.out.println("Creating new object"); 
       Hibernate tempRec = new Hibernate("bah", "blah"); 

       // start a transaction 
       session.beginTransaction(); 

       // save the object 
       session.save(tempRec); 

       // commit transaction 
       session.getTransaction().commit(); 

       System.out.println("Done!"); 
      } 
      finally { 
       factory.close(); 
      } 
      } 

      public String getFname() { 
        return fname; 
       } 

       public void setFname(String fname) { 
        Hibernate.fname = fname; 
       } 

       public String getLname() { 
        return lname; 
       } 

       public void setLname(String lname) { 
        Hibernate.lname = lname; 
       } 
     } 

`

+0

Aktualisieren Sie Ihre vollständige Stack-Trace, so dass wir finden können, wo ist der Fehler –

+0

Um das Zeichenfeld als eine ID zu verwenden, müssen Sie die folgende Annotation @GeneratedValue (generator = "uuid") @GenericGenerator (name = "Uuid ", strategie =" uuid2 ") @Column (name =" PR_KEY ") private String prKey; – LearningPhase

+0

Dies ist ein Beispiel, das Sie entsprechend Ihren Anforderungen ändern müssen – LearningPhase

Antwort

1

Es ist ein wirklich ein großer Fehler static Felder als Eigenschaften einer persistenten Klasse zu verwenden.

@Id 
@Column(name="first_name") 
private static String fname; 

@Column(name="last_name") 
private static String lname; 

sollte

@Id 
@Column(name="first_name") 
private String fname; 

@Column(name="last_name") 
private String lname; 

Sie brauchen es nicht, weil es kein Hibernate related stuff ist

@ManagedBean 
@SessionScoped 

Sie Student Klasse mit addAnnotatedClass(Student.class) hinzufügen, vielleicht müssen Sie Fügen Sie stattdessen Hibernate Klasse hinzu.

Und bitte nicht setzen main() in der persistenten Klasse. Sie müssen Hibernate Klasse und, zum Beispiel, HibernateTest Klasse mit main() Klasse haben.

Verwandte Themen