Применять ограничения FK, когда JPA вставляет унаследованные объекты - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть многоуровневая модель наследования в JPA, в которой используется объединенная стратегия

@Entity
@Table(name="PARTY")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="PARTY_TYPE",discriminatorType=DiscriminatorType.STRING)
public class Party implements Serializable{
...
}

@Entity
@Table(name="PARTY_ORG")
@DiscriminatorValue(value="PARTY_ORG") // value in party table's PARTY_TYPE column that dictates an Org.
@PrimaryKeyJoinColumn(name="AFF_PARTY_ORG_ID")
//how children clients and orgs willmap to us.
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="ORG_TYPE_CD")
public class PartyOrg extends Party implements Serializable{
....
}

.. продолжает занятия с детьми

Но всякий раз, когда я пытаюсь вставить, базовая база данных DB2 выдает ошибку ограничения FK, потому что PK PartyOrg также является FK, указывающим на сторону.

Это означает, что JPA должен сохранить и сбросить Party до того, как он попытается сохранить PartyOrg. (Я проверил с помощью manul SQl, что вставка PartyOrg без Party является причиной ошибки. Сначала вставка Party, затем PartyOrg (с тем же идентификатором) работает нормально.

SO

Как я могу сказать JPA в первую очередь сохранить классы верхнего уровня, чтобы соблюдать ограничение FK для дочерних классов / таблиц.

1 Ответ

0 голосов
/ 23 сентября 2010

Обнаружена проблема!

База данных DB2 использует плавающие числа для PK.Когда мой администратор БД сказал «используй поплавки», я никогда не останавливался, чтобы рассмотреть несоответствие между миром БД и миром Java.Оказывается, что DB2 «плавает», в свою очередь, должна вызывать двойники Java.После того, как я преобразовал все свои ключи в удвоения, все работает.

Я могу только догадываться, что проблемы с округлением в числах с плавающей точкой вызвали несоответствия FK - но это чистые предположения.

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