Entitymanager /持久性文件结构

时间:2010-08-02 09:04:35

标签: java orm jpa persistence ejb-3.0

标题不清楚,因为我想不到一个,但是,我有一个EJB项目,我正在尝试使用JPA。要创建实体管理器,我将通过注释

注入它
@PersistenceContext(unitName="testConnection")  
private EntityManager em;

当我运行一个我认为没问题的测试查询时

Query userQuery = em.createQuery("SELECT u FROM TestUser u WHERE u.username = 'test' u.password = 'test'");
tu = (TestUser) userQuery.getSingleResult();

我得到一个异常,指向EJB无法创建实体管理器。

奇怪的是,当我跑步时

tu = (TestUser) em.find(TestUser.class, id);

一切正常

我的项目结构是

  EAR
    EJB
    EJB Client
    JPA
       persistance.xml

我猜这是主要问题

  

SEVERE:java.lang.IllegalStateException:无法为unitName testConnection检索EntityManagerFactory

目前,各个项目使用依赖关系进行链接。

所以有什么想法吗?

由于 乔恩

2 个答案:

答案 0 :(得分:4)

  

我有一个EJB项目,我正在尝试使用JPA。要创建实体管理器,我将通过注释

注入它

注释部分本身看起来是正确的。

  

当我运行一个我认为没问题的测试查询时

我认为不是,它至少在WHERE子句中缺少一个AND。但我实际上会这样写:

Query userQuery = em.createQuery("SELECT u FROM TestUser u WHERE u.username = :name AND u.password = :password");
userQuery.setParameter("name", "test");
userQuery.setParameter("password", "test");
tu = (TestUser) userQuery.getSingleResult();
  

我得到一个异常,指向EJB无法创建实体管理器。奇怪的是,当我跑(...)时,它运作正常。

除非得到例外,否则确实很奇怪。

  

我的项目结构是(...)

我不知道它是否是拼写错误,但它是persistence.xml,而不是persistance.xml,它应该位于持久性单元根目录的META-INF目录中。

  

所以有什么想法吗?

修复查询,修复persistence.xml包装。另请提供其内容和完整的堆栈跟踪。

答案 1 :(得分:0)

我曾经写过一个实体经理,但目前我无法访问代码,但看看这个页面以及底部链接的那些:

http://www.javabeat.net/articles/91-ejb-30-entity-manager-2.html