2016-01-26 5 views
0

Я получаю сообщение об ошибке Named Query, не найденное на сервере JBOSS EAP 6.3. Я использую Hibernate4 Seam 2.2 JPA 2.0 и Jboss eap 6 в своем приложении.NamedQuery не найден Hibernate4 Seam 2.2 JPA 2.0 и Jboss eap 6

Caused by: java.lang.IllegalArgumentException: Named query not found: findOfficerByEmpIDFetchAssigners 
at org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:601) [hibernate-entitymanager-4.2.14.SP1-redhat-1.jar:4.2.14.SP1-redhat-1] 
at org.jboss.seam.persistence.EntityManagerProxy.createNamedQuery(EntityManagerProxy.java:46) [jboss-seam-2.2.0.GA.jar:2.2.0.GA] 
at com.wachovia.apps.amaster.BatchProcessorBean.getLoggedInUser(BatchProcessorBean.java:68) [amaster-ejb-1.0.jar:] 

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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="AccountMaster"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/jdbc/AccountMaster</jta-data-source> 
    <properties> 
    <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> 
    <property name="hibernate.cache.use_query_cache" value="false"/> 
    <property name="hibernate.show_sql" value="false"/> 
    <property name="jboss.entity.manager.jndi.name" value="java:jboss/AmasterEntityManager"/> 
    <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/AmasterEntityManagerFactory"/> 
    <property name="hibernate.default_schema" value="AMASTER"/> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
    <property name="hibernate.id.new_generator_mappings" value="false"/> 
    <property name="jboss.as.jpa.managed" value="false"/>   
    <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> 
    <property name="jboss.as.jpa.adapterModule" value="org.jboss.as.jpa.hibernate:4"/> 
    <property name="jboss.as.jpa.adapterClass" value="org.jboss.as.jpa.hibernate4.HibernatePersistenceProviderAdaptor"/>  
    </properties> 


Мой Entity класс,

@Entity 
@Table(name="OFFICER") 
@NamedQueries({ 
@NamedQuery(name="findOfficerByEmployeeId", 
      query="from Officer where upper(employeeId)=upper(:id) order by employeeId"), 
@NamedQuery(name="findOfficerByEmpIDFetchAssigners", 
      query="from Officer o left join fetch o.assigners ass where upper(o.employeeId) = :id")  
}) 
public class Officer implements java.io.Serializable { 

И вот мой Stateless класс боб я называю NamedQuery,

@Stateless 
@Name("batchProcessor") 
@AutoCreate 
@TransactionManagement(TransactionManagementType.BEAN) 
public class BatchProcessorBean implements BatchProcessor, Serializable { 
private static final long serialVersionUID = 395715959808111918L; 

@SuppressWarnings("seam-unresolved-variable") 
@In(value = "entityManager") 
private EntityManager em; 

public Officer getLoggedInUser(String employeeID) { 
    UserTransaction instance = Transaction.instance(); 
    List<Officer> list = em.createNamedQuery("findOfficerByEmpIDFetchAssigners").setParameter("id", employeeID).getResultList(); 

Я поместил persistence.xml в папку под ejb/resources/META-INF. Я пробовал предыдущие сообщения об ошибке NamedQuery. Это не исправление моей проблемы.

Пожалуйста, помогите мне разобраться с проблемой. Спасибо

ответ

0

Я решил проблему. Я добавил следующий класс тег в persistence.xml чтобы решить эту проблему,

<class>com.wachovia.apps.amaster.orm.Officer</class> 

Порядок тегов важны в persistence.xml. В моем случае этот тег класса должен быть добавлен до тега <properties> и после тега <jta-data-source>.