2010-12-15 31 views
-1

1つのレコードをmysql 5.1 dbに保存しようとしています。私は、エンティティmanager.persistを(使用する場合)またはマージ()メソッド、それもDBにレコードを保存していないと私はこのようなネイティブのINSERT文を使用しようとすると、それはからの例外JPAクエリで例外がスローされる

Query query = entityManager.createNativeQuery("insert into Employee(firstName,lastName,phone,email) values(?,?,?,?);"); 
    query.setParameter(1, employee.getFirstName()); 
    query.setParameter(2, employee.getLastName()); 
    query.setParameter(3, employee.getPhone()); 
    query.setParameter(4, employee.getEmail()); 

例外がスローされます上記のクエリは

org.springframework.orm.jpa.JpaSystemException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query 

私を助けてください!!!!

おかげ

+0

もっと見ることができますstacktrace?私はあなたがクエリに対してexecuteUpdateを呼び出すと仮定しています。なぜあなたは単に従業員のインスタンスを保存していないのであればjpaを使用していますか? JPAの全ポイントは、あなたがやっていることをする必要はありません。 – hvgotcodes

+0

このデータを保存するにはどうすればいいですか? entityManager.persist()またはmerge()を使用したいが、データを保存していない。 JPAなしでどうすれば保存できますか? – user509755

+0

完全な例外とスタックトレースのBozhoのリクエストに加えて、 'Employee'クラスのコードを投稿することができれば、おそらくIDの割り当て方法、equals()とhashcode()の実装、定義した固有の制約(存在する場合) – Mopper

答えて

3

あなたはおそらくスタックトレースの重要な部分を省略しているので、私はすぐに、クエリのお手伝いをすることはできませんが、私は解決策を持っている:

INSERT HQLクエリを使用しないでください。 。これは、JPAが動作する方法ではありません。代わりに、new Emplyee()オブジェクトを作成します。このオブジェクトは@Entityであり、その属性はentityManager.persist(employee)です。

これを機能させるには、実行中のトランザクションが必要です。 entityManager.getTransaction().being()が起動し、entityManager.getTransaction().commit()がコミットします。

+0

私のDAOは@トランザクションですので、begin()とcommit()を使う必要はないと思います。ところで、persist(従業員)はEntityExist例外をスローするため、データを保存していません。今私がデータベースにチェックインすると、レコードが全くありません。だから私はさらにそれを調べている.... – user509755

+0

全体の例外を与える。スタックトレース全体。それは常に重要です。 – Bozho