я следующая структуру веб-приложении (войны), работающее на JBoss EAP 6.1 с JPA 2 и Hibernate 4.2:JPA лицо из внешней баночки не найдено в войне
- Entity.jar (от другого внутреннего проекта)
- Application.war (содержащий Entity.jar в WEB-INF/Lib, включены как Maven зависимость, а не как специалист модуля)
в моем проекте веб-приложения (Application.war) у меня есть EJB содержащий EntityManager. В EJB я хотел бы создать JQL-Query (em.createQuery) для Entity из Entity.jar.
Если я вызываю метод EJB, содержащий запрос, я получил ошибку:
Caused by: javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [SELECT u FROM User as u WHERE u.name = :name]
Моя сущность Пользователь из Entity.jar выглядит как:
@Entity
@Table(name = "PL1_USER")
public class User implements Serializable {
...
EJB из Application.war :
@Stateless
public class UserService {
@PersistenceContext(unitName = "my-unit")
private EntityManager entityManager;
public User getUser(String username) {
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User as u WHERE u.name = :name", User.class);
query.setParameter("name", username);
return query.getSingleResult();
}
}
persistence.xml из Application.war (WEB-INF/классы/META-INF):
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="my-unit" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasource/MY-DS</jta-data-source>
<jar-file>Entity.jar</jar-file>
<properties>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="false" />
<property name="hibernate.jdbc.batch_size" value="30" />
<property name="hibernate.jdbc.fetch_size" value="100" />
<property name="hibernate.max_fetch_depth" value="0" />
<property name="hibernate.order_updates" value="true" />
<property name="hibernate.use_identifier_rollback" value="true" />
<!-- JDBC Driver returns row count for batch statements -->
<property name="hibernate.jdbc.batch_versioned_data" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2400Dialect" />
</properties>
</persistence-unit>
Структура Application.war:
- Application.war
- META-INF
- MANIFEST.MF (containing Entity.jar in Class-Path)
- resources
- WEB-INF
- com
- example
- UserService.class
- classes
- META-INF
- persistence.xml
- lib
- Entity.jar
- index.xhtml
Если Вам необходима дополнительная информация/подробности, пожалуйста, дайте мне знать.
Я уже искал в google, но ничего, что я нашел, работал для меня.
Я очень рад, если кто-нибудь может мне помочь.
На данный момент у меня нет уха (это только война), но я уже пытался установить значение jar-файла в «lib/Entity.jar» без успеха. Является ли ушной файл единственным способом его запуска? – marco235
Вам нужно будет обновить вопрос с помощью структуры вашего развернутого приложения. –
Я добавил структуру Application.war к вопросу. – marco235