Итак, мы нашли проблему.К сожалению, не существует какого-то стандартного исключения конфигурации, которое выдается, когда 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 кратковременным, чтобы получить его другим способом, и это исключило исключение.