Hibernate бросая NullPointerException - processFkSecondPassInOrder - PullRequest
2 голосов
/ 16 февраля 2012

Кто-нибудь видел это сообщение раньше?

На форумах Hibernate ведутся некоторые дискуссии, в которых не совсем ясно, в чем может быть проблема.

Мы используем Hibernate 3.6.9 с JPA и Spring 3.0.5. Это исключение только что появилось между двумя сборками (так как оно работало день назад и сегодня вызывает проблемы при развертывании). Вероятно, это связано с каким-то неправильно настроенным файлом orm? У нас есть файлы orm.xml для наших моделей, а также файлы для именованных запросов.

Caused by: java.lang.NullPointerException
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1481)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1419)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
    at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1519)
    at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1100)
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:689)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

Итак, мы нашли проблему.К сожалению, не существует какого-то стандартного исключения конфигурации, которое выдается, когда Hibernate не может найти FK, например «Эй, фиктивная, я не могу найти FK, который вы определили в файле orm».

У нас есть два объекта в одной и той же схеме / db:

class Person {
  Long id;
  String name;
  Address address;
  ...
}

Таким образом, объект Address - это один к одному, который существует как часть составного ключа:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
  http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
  version="2.0">
     <description>com.foo.Person Entity Mapping</description>
     <package>com.foo</package>
     <schema>COMMON</schema>
     <access>FIELD</access>
     <entity class="com.foo.Person" access="FIELD" metadata-complete="true">
        <table name="PERSON"/>
            <attributes>
                <embedded-id name="id"/>
                <basic name="name">
                        <column name="NAME"/>
                </basic>
            </attributes>
     </entity>
     <embeddable class="com.foo.Person$Id" access="FIELD">
        <attributes>
        ...
        <one-to-one name="address" fetch="LAZY" target-entity="com.foo.Address" >
            <join-column name="ADDR_CD" insertable="false" updatable="false"/>
            <cascade>
                <cascade-all/>
            </cascade>
        </one-to-one>
        </attributes>
     </embeddable> 
</entity-mappings>

Проблема заключалась в том, что мы переместили объект Address в другую схему на другой базе данных и оставили связь в файле orm (так что Address все еще был один в одном в составном ключе).

Чтобы исправить это,мы отключили связь и сделали Address кратковременным, чтобы получить его другим способом, и это исключило исключение.

0 голосов
/ 16 октября 2013

Только что это произошло, когда веб-приложение A использовало библиотеку B, и мы добавили зависимость от библиотеки B к библиотеке C (т. Е. B.Foo, имеющей отношение ManyToOne с C.Bar), но конфигурация Hibernate для веб-приложения A не делала 't включить библиотеку C в список пакетов для сканирования.Результат: Hibernate не знал о сущностях из библиотеки C, на которые ссылаются.

0 голосов
/ 17 января 2013

У нас была та же проблема, но проблема была в том, что при извлечении интерфейса из сущности рефакторинг Eclipse заменял реализованное имя класса на интерфейс в других сущностях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...