2016-04-17 35 views
1

我開發了一個簡單的網絡應用程序,通過休眠連接到MySQL。在某一點上,我甚至成功地創建了一個連接並將java對象插入到數據庫中。然而,之後我做了一些改變,以滿足我的項目需求,在那裏我搞砸了。無論我嘗試調試它多少,我都會收到此錯誤「沒有爲實體指定標識符」。我甚至從零開始創建了一個新項目,但徒勞無功。請幫助我確定我做錯了什麼。休眠:沒有爲實體指定標識

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

更新您的完整堆棧跟蹤,以便我們可以找到錯誤的位置 –

+0

爲了將字符串字段用作id,您需要將下面的註釋@GeneratedValue(generator =「uuid」)@GenericGenerator(name =「uuid 「,strategy =」uuid2「)@Column(name =」PR_KEY「)private String prKey; – LearningPhase

+0

以上是您需要根據您的要求對其進行更改的示例 – LearningPhase

回答

1

這是一個非常大的錯誤使用static領域一個持久化類的屬性。

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

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

應該

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

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

你不需要它,因爲它不是一個Hibernate相關的東西

@ManagedBean 
@SessionScoped 

您與addAnnotatedClass(Student.class)添加Student類,也許你需要改爲添加Hibernate類。

請不要把main()放在持久化類中。您需要有Hibernate課程,例如,HibernateTest課程需要main()