Несоответствие JPQL между спящим режимом и eclipselink

У меня есть следующий запрос, который работает в Hibernate, но не в eclipse:

select o from Organisation o where o.code=:code and o.type=:type

Мне непонятно, почему это так, я надеялся, что кто-то другой может уточнить для нас. Возвращаемая ошибка:

Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Error compiling the query [select o from Organisation o where  o.code=:code and o.type=:type]. Unknown entity type [Organisation].

Мы не внесли никаких других изменений, кроме переключения класса провайдера в файле persistence.xml, чтобы указать, что теперь мы используем eclipselink.


person James Brown    schedule 22.11.2010    source источник


Ответы (1)


Похоже, EclipseLink не сканирует ту часть ваших JAR-файлов/классов, которая содержит класс Organization. Объявите это явно в файле persistence.xml и посмотрите, что произойдет:

<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="YourPersUnit">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

    <class>foo.bar.Organisation</class>
</persistence-unit>
</persistence>
person βξhrαng    schedule 22.11.2010
comment
У нас есть несколько файлов jar с разными наборами сохраняемых объектов. Оказывается, hibernate обрабатывает эту ситуацию иначе, чем eclipse, проще всего было включить <exclude-unlisted-classes>false</exclude-unlisted-classes> - person James Brown; 22.11.2010
comment
Я считаю, что Hibernate добавляет аннотированные классы @Entity, которые по умолчанию находятся в пути к классам, если вы не скажете ему не делать этого. Наверное, поэтому раньше работало. Ответ Ninja правильный, но альтернативой может быть поиск эквивалентного свойства для EclipseLink, которое сообщает ему найти все классы @Entity во время выполнения. Я предполагаю, что есть один. - person Jim Tough; 22.11.2010
comment
Обратите внимание, что exclude-unlisted-classs не предназначен для использования в средах J2SE (согласно спецификации), хотя некоторые реализации используют его там... вероятно, поэтому вы видите другое поведение, не охватываемое спецификацией. Вы не указываете, какой env вы используете - person DataNucleus; 22.11.2010