Я пробуя OpenJPA 2.0.1 в первый раз, и я получаю:Ошибка при вызове экземпляра в PersistenceCapable. Убедитесь в том, что он был усовершенствован
79 WARN [main] openjpa.Runtime - The configuration property named "openjpa.Id" was not recognized and will be ignored, although the name closely matches a valid property called "openjpa.Id".
179 INFO [main] openjpa.Runtime - Starting OpenJPA 2.0.1
371 INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary" (PostgreSQL 8.4.4 ,PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)).
<openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance "[email protected]" to PersistenceCapable failed. Ensure that it has been enhanced.
FailedObject: [email protected]
at org.apache.openjpa.kernel.BrokerImpl.assertPersistenceCapable(BrokerImpl.java:4559)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2561)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:706)
at ...
Согласно the OpenJPA docs, я не должен ничего делать, чтобы получить базовое повышение на время работы:
2.5. Опущение усилителя OpenJPA
OpenJPA не требует запуска энхансера . Если вы не запустите усилитель , OpenJPA вернется к одной из нескольких возможных альтернатив для отслеживания состояния в зависимости от среды исполнения .
Java 6 класс ретрансформации:
если вы работаете приложение в среде Java 6 , OpenJPA будет пытаться динамически регистрировать ClassTransformer, который будет переопределять ваши постоянные классы на лету отслеживать доступ к постоянным данным. Кроме того, OpenJPA создаст подкласс для каждого из ваших постоянных классов . Когда вы выполняете запрос или пересекаете отношение, OpenJPA будет вернуть экземпляр подкласса. Это означает, что оператор instanceбудет работать, как ожидалось, но o.getClass() вернет подкласс вместо класса, который вы написали. Вам не нужно ничего делать , чтобы получить подобное поведение. OpenJPA будет автоматически определяет, может ли среда исполнения ретрансляции класса Java.
Любые подсказки, почему это не работает? Спасибо большое ...
(Бонусные баллы за почему предупреждение openjpa.Id происходит - я не установлено такое свойство ...)
Я настоятельно рекомендую НЕ использовать это свойство. Пожалуйста, прочитайте http://openjpa.apache.org/entity-enhancement.html для получения дополнительной информации. – Rick
@Rick: сейчас я просто играю, и я действительно не хочу добавлять шаг сборки между каждым циклом компиляции/запуска ... –
Я бы предложил использовать -javaagent .... Если вы «Запуск в Eclipse очень легко получить. – Rick