目前我的项目如下:
Root
-- Common (Contains Entity classes)
-- Processor (Refers Common)
Common和Controller都是maven项目(每个都部署在自己的Jetty实例中 - 常见的是面向用户的jetty服务器,处理器是目前在jetty服务器上运行的后端守护进程,因为它设计用于响应某些内部http - 请求)。 Root包含Common和Processor
的父pom当我在Common中执行DB相关操作时,它运行良好。
但是当我从处理器调用相同的函数时,它会出错:
java.lang.IllegalArgumentException:
org.hibernate.hql.internal.ast.QuerySyntaxException:
User is not mapped [select users from User users fetch all properties]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:294)
at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:129)
at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:96)
at com.mysema.query.jpa.impl.AbstractJPAQuery.list(AbstractJPAQuery.java:248)
at com.myproject.common.persistence.UserManager.selectStar(UserManager.java:110)
UserManager.selectStar()可以很好地完成常见操作。 Common和Processor都有query-dsl插件来生成Q文件。 Common和Processor都有META-INF / persistence.xml文件。
UserManager将EntityManagerFactory实例化为:
emf = Persistence.createEntityManagerFactory("world");
其中“world”是我的DB的名称。
./common/src/main/resources/META-INF/persistence.xml
./processor/src/main/resources/META-INF/persistence.xml
处理器依赖于common:
<!-- language: lang-xml -->
<dependency>
<groupId>com.mock</groupId>
<artifactId>common</artifactId>
</dependency>
所有依赖版本也在Root pom的&lt; dependencyManagement&gt;中进行管理。部分。
答案 0 :(得分:0)
看起来您没有在处理器项目中正确配置SessionFactory。
你能把你的pom文件添加到问题和你的hibernate配置文件吗?
我猜您的处理器项目是网络前端,您的常见项目是您的域名吗?
如果是这种情况,您应该将您的公共项目添加为处理器项目的依赖项,那么您将能够从处理器项目启动查询,因为您将使用您的公共项目休眠上下文。
问候。
答案 1 :(得分:0)
您提供的信息不充分。您使用的是Spring,这是WebApp还是Standalone?
除此之外,您不需要创建两个persistence.xml
文件。检查您是如何创建EntityManager
- &gt;基于女巫persistence-unit
?
答案 2 :(得分:0)
请提供其他人要求的所有必要信息。这是一个webapp吗?你在使用Spring吗?请为pom.xml文件添加完整代码。
正如其他人所说,你只需要一个persistence.xml。在数据库上执行的所有查询都应该在相同的休眠上下文中运行。
此外,如果你有责任分离,你的处理器项目不应该执行任何查询,只是请求一些公共项目层来执行它并返回结果。
问候。