2011-07-20 6 views
1

私はJPAを初めて使用しています。私はJPAに問題があります。 iは、エンティティ・マネージャを使用している 次のようJPA EntityManagerの問題

1: package com.icesoft.icefaces.samples.datatable.jpa; 
    2: 
    3: import java.util.logging.Level; 
    4: import java.util.logging.Logger; 
    5: 
    6: import javax.persistence.EntityManager; 
    7: import javax.persistence.EntityManagerFactory; 
    8: import javax.persistence.Persistence; 
    9: import javax.persistence.Query; 
    10: /** 
    11: * @author MyEclipse Persistence Tools 
    12: */ 
    13: public class EntityManagerHelper { 
    14:  
    15:  private static final EntityManagerFactory emf; 
    16:  private static final ThreadLocal<EntityManager> threadLocal; 
    17:  private static final Logger logger; 
    18:  
    19:  static { 
    20:   emf = Persistence.createEntityManagerFactory("tutorialPU");   
    21:   threadLocal = new ThreadLocal<EntityManager>(); 
    22:   logger = Logger.getLogger("tutorialPU"); 
    23:   logger.setLevel(Level.ALL); 
    24:  } 
    25:   
    26:  public static EntityManager getEntityManager() { 
    27:   EntityManager manager = threadLocal.get();  
    28:   if (manager == null || !manager.isOpen()) { 
    29:    manager = emf.createEntityManager(); 
    30:    threadLocal.set(manager); 
    31:   } 
    32:   return manager; 
    33:  } 
    34:  
    35:  public static void closeEntityManager() { 
    36:   EntityManager em = threadLocal.get(); 
    37:   threadLocal.set(null); 
    38:   if (em != null) em.close(); 
    39:  } 
    40:  
    41:  public static void beginTransaction() { 
    42:   getEntityManager().getTransaction().begin(); 
    43:  } 
    44:  
    45:  public static void commit() { 
    46:   getEntityManager().getTransaction().commit(); 
    47:  } 
    48:  
    49:  public static Query createQuery(String query) { 
    50:   return getEntityManager().createQuery(query); 
    51:  } 
    52:  
    53:  public static void log(String info, Level level, Throwable ex) { 
    54:   logger.log(level, info, ex); 
    55:  } 
    56:  
    57: } 

私のpersistence.xmlである:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 

     <persistence-unit name="OrderEJB" type="JTA"> 
     <jta-data-source>movieDatabase</jta-data-source> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
     </persistence-unit> 
    </persistence> 

私は2つの問題がある:。 1-iがgetEntityManager()を呼び出す持続(anObject) ; データベースに何も保存されず、コンテナログにエラーも発生しません!! 2 - すべての物事は大丈夫そうですが、私は(サーバを再起動せずに)、アプリケーションを再デプロイする際JPAのすべての操作は、次の例外で失敗:私は、サーバーを再起動した場合

java.lang.IllegalArgumentException: The type [null] is not the expected 
[EntityType] for the key class [class entity.MyClass]. 

すべてのものは大丈夫です!

netbeans 6.9.1、glasfish 3.1、eclipselink(JPA 2.0) を使用していますが、どうすれば問題を解決できますか?事前に おかげ

答えて

0
  1. あなたは変更が (manager.getTransaction().commit()を試してみてください)

  2. は完全なスタックトレースを投稿永続化されることのEntityManagerのトランザクションをコミットする必要があります。

0

のEclipseLinkのデフォルトの動作では、フラッシュ()またはトランザクションの終了(コミット時に自動フラッシュ)が

で呼び出すときにINSERTクエリは、唯一の選択クエリの前に行われているように見えます異なる動作(例えば、休止状態)を持つ持続性プロバイダです。あなたの場合は、em.flush()を呼び出すか、トランザクションを閉じる(またはコンテナが正しく動作することを確認してください)