【问题标题】:Entity Manager / persistance file structureEntitymanager/持久化文件结构
【发布时间】:2011-03-24 02:47:34
【问题描述】:

标题不清楚,因为我想不出一个,但是,我有一个 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

我猜这是主要问题

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

各个项目当前使用依赖关系链接。

有什么想法吗?

谢谢 乔恩

【问题讨论】:

    标签: java orm jpa persistence ejb-3.0


    【解决方案1】:

    我有一个 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 打包。另请提供其内容和完整的堆栈跟踪。

    【讨论】:

    • 啊,非常感谢你,持久性名称是一个错字。这是一个糟糕的查询(我不敢相信我自己没有看到它)我对它给出的错误感到惊讶,因为查询格式不正确。再次感谢
    【解决方案2】:

    我曾经写过一个实体管理器,但目前无法访问代码,但请查看此页面和底部链接的代码:

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

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多