【问题标题】:How to use Hibernate/QueryDSL entities from a maven sub-project如何使用 Maven 子项目中的 Hibernate/QueryDSL 实体
【发布时间】:2015-09-29 05:50:31
【问题描述】:

目前我的项目如下:

Root

 -- Common (Contains Entity classes)

 -- Processor (Refers Common)

Common 和 Controller 都是 maven 项目(每个都部署在自己的 Jetty 实例中 - common 是面向用户的 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”是我的数据库的名称。

./common/src/main/resources/META-INF/persistence.xml
./processor/src/main/resources/META-INF/persistence.xml

Processor 依赖于 common as:

<!-- language: lang-xml -->
<dependency>
  <groupId>com.mock</groupId>
  <artifactId>common</artifactId>
</dependency>

所有依赖版本也在根 pom 的 部分中进行管理。

【问题讨论】:

标签: java hibernate maven querydsl


【解决方案1】:

您的处理器项目中似乎没有正确配置 SessionFactory。

您能否将您的 pom 文件添加到问题和您的休眠配置文件中?

我猜您的处理器项目是 Web 前端,而您的公共项目是您的域?

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

问候。

【讨论】:

【解决方案2】:

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

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

【讨论】:

【解决方案3】:

请按照其他人的要求提供所有必要的信息。这是一个网络应用程序吗?你用的是弹簧吗?请为 pom.xml 文件添加完整代码。

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

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

问候。

【讨论】:

猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多