2016-04-17 27 views
1

私は、休止状態でMySQLに接続する簡単なWebアプリケーションを開発しました。ある時点で、私は接続を作成し、JavaオブジェクトをDBに挿入することに成功しました。しかし、その後私はプロジェクトのニーズを満たすためにいくつかの変更を加えました。どのように私がそれをデバッグしようとするに関係なく、 "エンティティの識別子が指定されていません"というエラーが表示されます。私は最初から新しいプロジェクトを作りましたが無駄でした。私が間違っていることを特定するためにここで私を助けてください。Hibernate:エンティティに識別子が指定されていません

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 ")プライベートString prKey; – LearningPhase

+0

上記はあなたの要件に応じて変更する必要がある例です – LearningPhase

答えて

1

永続クラスのプロパティとしてstaticフィールドを使用して、本当に大きな間違いです。

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

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

あなたはaddAnnotatedClass(Student.class)Studentクラスを追加Hibernateは関連するもの

@ManagedBean 
@SessionScoped 

ではありません、それのためにあなたは、それを必要としない

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

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

する必要があり、多分あなたがする必要があり代わりにHibernateクラスを追加してください。

そして、永続クラスにmain()を入れないでください。 Hibernateクラスが必要です。たとえば、HibernateTestクラスのクラスはmain()です。