2015-09-29 2 views
0

В настоящее время мой проект выглядит следующим образом:Как использовать Hibernate/QueryDSL объекты из Maven подпроекта

Root 

-- Common (Contains Entity classes) 

-- Processor (Refers Common) 

Общие и контроллер оба Maven проект (каждый развернутый в отдельном экземпляре Jetty - распространенным является пользователем облицовочным сервер приставок и процессор - это фоновый демон, который в настоящее время работает на причальном сервере, так как он предназначен для ответа на некоторые внутренние HTTP-запросы тоже). Корень содержит родительский pom как для Common, так и для процессора

Когда я выполняю операции, связанные с DB в Common, он работает очень хорошо.

Но когда я называю те же функции от процессора, он выдает ошибку:

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, и процессор имеют файл 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> 

Все версии зависимостей также управляются в <dependencyManagement> разделе корневого POM в.

+0

Возможный дубликат [Невозможно вызвать Hibernate/QueryDSL из другого подпроекта maven] (http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject) – user2250246

ответ

0

похоже, что у вас нет правильно настроенного SessionFactory в вашем проекте процессора.

Можете ли вы добавить свои файлы pom к вопросу и вашим конфигурационным файлам спящего режима?

Я предполагаю, что ваш процессорный проект - это веб-интерфейс, а ваш общий проект - ваш домен?

Если это так, вы должны добавить свой общий проект в зависимость от проекта процессора, тогда вы сможете запускать запросы из проекта процессора, потому что вы будете использовать общий контекст hibernate проекта.

С уважением.

+0

Спасибо, гори! Я повторно разместил вопрос с полным кодом по адресу http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject Пожалуйста, ответьте там, я удалите этот вопрос в ближайшее время – user2250246

0

Информация, предоставленная вами, недостаточна. Вы используете Spring, это WebApp или Standalone?

Кроме того, вам не нужно создавать два файла persistence.xml. Проверьте, как вы создаете EntityManager -> на основе ведьмы persistence-unit?

+0

Спасибо! Я повторно разместил вопрос с полным кодом по адресу http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject Пожалуйста, ответьте там, я удалю этот вопрос в ближайшее время – user2250246

0

Просьба предоставить всю необходимую информацию по просьбе других людей. Это webapp? Вы используете Spring? Добавьте полный код для файлов pom.xml.

И, как говорили другие стипендиаты, вам нужно только одно persistence.xml. Все запросы, выполняемые в базе данных, должны действовать в одном и том же спящем контексте.

Кроме того, если у вас есть разделение ответственности, ваш процессорный проект не должен выполнять какой-либо запрос, просто запрашивая некоторый общий слой проекта для его выполнения и возвращать результат.

Отношения.

+0

Я повторно разместил вопрос с полным кодом на http://stackoverflow.com/questions/32857422/unable-to-call-hibernate-querydsl-from-another-maven-subproject Пожалуйста, ответьте там, я удалит этот вопрос в ближайшее время – user2250246

Смежные вопросы