2016-06-01 10 views
0

Java Persistence APIを使用してレコードを正常に作成、結合、フェッチできましたが、レコードを削除できません。私はem.createNativeQuery( "Delete ...")を使用しましたが、うまくいきました。問題はエンティティマネージャを使ってその問題を解決したいということです。私は、上記のコードをDerbyで試してみたところ、oracleデータベースで問題が発生する可能性があると思います。Java永続性apiレコードOracleデータベースを削除/削除しない11g XE

public void destroy(String id) throws NonexistentEntityException, RollbackFailureException, Exception { 
    EntityManager em = null; 
    Context initCtx = new InitialContext(); 
    utx = (UserTransaction) initCtx.lookup("java:comp/env/UserTransaction"); 
    try { 
     utx.begin(); 
     em = getEntityManager(); 
     //Query query = em.createNativeQuery("DELETE FROM SERVICIO WHERE SERVICIODESCRIPCION = '"+id+"'"); 
     //query.executeUpdate(); 
     Servicio servicio; 
     try { 
      servicio = em.getReference(Servicio.class, id); 
      servicio.getServiciodescripcion(); 
     } catch (EntityNotFoundException enfe) { 
      throw new NonexistentEntityException("The servicio with id " + id + " no longer exists.", enfe); 
     } 
     em.remove(servicio); 
     utx.commit(); 
    } catch (Exception ex) { 
     try { 
      utx.rollback(); 
     } catch (Exception re) { 
      throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re); 
     } 
     throw ex; 
    } finally { 
     if (em != null) { 
      em.flush(); 
      em.close(); 
     } 
    } 
} 
+0

何が問題なのですか?例外が発生するか、単純にレコードが削除されませんか? – niceman

+0

レコードが削除されず、glassfishサーバーにエラーメッセージや例外がないため、Oracleデータベースが請願を受け取ったかどうかを確認しようとしましたが、方法がわかりません。私はコードをデバッグし、コンテキストからオブジェクトを取得します。 –

+0

また、主キーは文字列ですが、それが問題になると思いますか? –

答えて

0

実際の問題は、私の主キーのデータ型がCHAR(10)に設定し、私はVARCHAR(10)に変更する解決、そう結論にOracleデータベースを扱うときにされたということでしたJPAで主キーがテキストに設定されている場合、使用する必要のあるデータ型はCHARではなくVARCHARであるため、エンティティ・マネージャはうまく機能します。どうも。

関連する問題