如何使用maven子项目中的Hibernate / QueryDSL实体

时间:2015-09-29 05:50:32

标签: java hibernate maven querydsl

目前我的项目如下:

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;中进行管理。部分。

3 个答案:

答案 0 :(得分:0)

看起来您没有在处理器项目中正确配置SessionFactory。

你能把你的pom文件添加到问题和你的hibernate配置文件吗?

我猜您的处理器项目是网络前端,您的常见项目是您的域名吗?

如果是这种情况,您应该将您的公共项目添加为处理器项目的依赖项,那么您将能够从处理器项目启动查询,因为您将使用您的公共项目休眠上下文。

问候。

答案 1 :(得分:0)

您提供的信息不充分。您使用的是Spring,这是WebApp还是Standalone?

除此之外,您不需要创建两个persistence.xml文件。检查您是如何创建EntityManager - &gt;基于女巫persistence-unit

答案 2 :(得分:0)

请提供其他人要求的所有必要信息。这是一个webapp吗?你在使用Spring吗?请为pom.xml文件添加完整代码。

正如其他人所说,你只需要一个persistence.xml。在数据库上执行的所有查询都应该在相同的休眠上下文中运行。

此外,如果你有责任分离,你的处理器项目不应该执行任何查询,只是请求一些公共项目层来执行它并返回结果。

问候。