2015-09-29 28 views
0

目前我的項目是這樣的:如何使用Hibernate/QueryDSL實體從一個maven子項目

Root 

-- Common (Contains Entity classes) 

-- Processor (Refers Common) 

常見和控制器都是Maven項目(在自己的碼頭情況下,每個部署 - 普通是面向用戶的jetty服務器和處理器是當前在jetty服務器上運行的後端守護程序,因爲它也用於響應某些內部http請求)。 Root包含共同和處理器的父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"); 

其中, 「世界」 是我的數據庫的名稱。

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

處理器具有共同的依賴性:

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

所有依賴的版本也正在根POM的<dependencyManagement>部所管理。

+0

可能的重複[無法從另一個maven子項目調用Hibernate/QueryDSL](http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject) – user2250246

回答

0

看起來好像沒有在Processor項目中正確配置SessionFactory。

你可以把你的pom文件添加到問題和你的hibernate配置文件中嗎?

我猜你的處理器項目是Web前端,你的通用項目是你的域名?

如果這是你應該添加您共同的項目作爲處理器項目的依賴的話,那麼你就能夠從處理器項目發起查詢,因爲您將使用您共同項目休眠上下文。

問候。

+0

謝謝gorri! 我已重新發布問題的完整代碼在http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject 請回復那裏,我會馬上刪除這個問題 – user2250246

0

您提供的信息不足。您是否使用Spring,這是WebApp還是獨立?

而且你不需要創建兩個persistence.xml文件。檢查你如何創建EntityManager - >基於女巫persistence-unit

+0

謝謝! 我已經用全部代碼重新發布了問題http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject 請回復那裏,我會刪除這個問題很快 – user2250246

0

請提供所有其他人要求的必要信息。這是一個Web應用程序?你在使用Spring嗎?請爲pom.xml文件添加完整的代碼。

和其他研究員說,你只需要一個persistence.xml中。在數據庫上執行的所有查詢都應該在相同的hibernate上下文中執行。

此外,如果你有責任分離,你的處理器項目不應該執行任何查詢,只是請求一些公共的項目層來執行它並返回結果。

關於。

+0

我已經用全部代碼重新發布了問題http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject 請在那裏回覆,我將很快刪除這個問題 – user2250246

相關問題