Я новичок в Java EE и у меня возникли проблемы с использованием именованных запросов. Мы используем JBoss 6 и Hibernate 3.6 (JPA 2.0). Сущность настраивается с помощью аннотаций, а не в файле persistence.xml:
@Entity
@NamedQueries({
@NamedQuery(name = "Node.findRootNodes", query = "SELECT n FROM Node n WHERE n.parent IS NULL OR n.parent = 0"),
...
})
public class Node implements Serializable { ... }
При развертывании jar-файла, содержащего сущность, JBoss-log сообщает нам, что именованный запрос связан:
[org.hibernate.cfg.annotations.QueryBinder] Binding Named query: Node.findRootNodes => SELECT n FROM Node n WHERE n.parent IS NULL OR n.parent = 0
К сожалению, при использовании именованного запроса мы всегда сталкиваемся с IllegalArgumentException:
[com.NodeTest] null: javax.ejb.EJBException: java.lang.IllegalArgumentException: Named query not found: Node.findRootNodes
Компонент без сохранения состояния, использующий именованный запрос, находится в том же банке, что и Node-Entity. Приложение, вызывающее компонент без сохранения состояния, находится в другом развернутом файле войны.
Кто-нибудь имеет представление, что я делаю не так? Спасибо за ваш ответ.
Вот файл persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="testPU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/main</jta-data-source>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
</properties>
</persistence-unit>
</persistence>