我在让我的实体豆子正确连接到 MySQL 时遇到问题。这是我的设置:
JBOSS: 6
优麒麟图: 11.04
EJB: 3.1
我目前正在尝试通过对 EAR 文件根目录中的 JARed 会话 Bean 的 JNDI 远程调用来访问实体 bean。
我的实体 bean 正确映射到我的数据库并在一个 EAR 文件中工作,但是我想在同一容器中的另一个 EAR 文件中使用相同的实体 bean,因此我已对实体 bean 进行了 JAR,并使用我的构建脚本将它们拉入我的第二个 EAR 文件中。我正在拉取与我的第一个 EAR 文件完全相同的持久性.xml文件,它指向我的部署目录根目录中的相同数据源 XML。我可以定义我的持久性上下文并访问我的实体 bean,而不会出错,我可以编译和部署我的 JBoss 服务器而没有任何异常。但是,当我在容器部署后尝试访问实体 bean 时,我收到此错误:
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [SELECT u FROM User u WHERE u.accountId=:accountId]
这是我正在使用的查询:
List<User> users = entityManager.createQuery("SELECT u FROM User u WHERE u.accountId=:accountId")
.setParameter("accountId", accountId)
.getResultList();
谁能告诉我,如果:
- JARing 实体 Bean 存在问题
- RESTeasy是否需要一些特殊的配置来处理实体豆
- 甚至可以使用 JAR 实体豆
- 如果我在同一容器中使用同一实体 Bean 的两个单独实例访问同一数据源,可能会有配置冲突
提前感谢您对此的任何帮助。我真的被困住了。
已添加 (20/05/2011):
所以我现在已经将我的实体和会话 bean 合并到一个罐子中并更改了持久性.xml因此请在下面包含 Nayan 建议的自动检测属性:
<property name="hibernate.archive.autodetection" value="class"/>
但无济于事。我在应用程序中注册了 JAR.xml并将 JAR 添加到构建脚本中的类路径中。
将 JAR 文件放入部署目录的根目录并尝试从那里访问它是否有意义?
在您的 EAR 中,似乎无法识别打包在 jar 中的实体,还要检查类路径中是否存在 jar。
尝试在持久性中添加<property name="hibernate.archive.autodetection" value="class"/>
.xml。
否则,请尝试包含持久单元的类。
<persistence-unit name="unitName">
<class>com.package.User</class>
...
</persistence-unit>
问题出在我的持久性.xml文件的位置上。我在 JAR 中具有持久性.xml文件,其中包含我的会话 bean,而不是需要它的实体 bean。问题解决了!