Ошибка нарушения гибернации - PullRequest
1 голос
/ 19 апреля 2010

У меня есть таблица обозначений с d_name в качестве первичного ключа, которую я использую в пользовательской таблице в качестве ссылки на внешний ключ. Я использую hbm для отображения в обозначении hbm У меня есть идентификатор, определенный как d_name, сопоставленный со столбцом базы данных. Я получаю ошибка:

"integrity constraint violation(user_designation_fk) parent key not found. "

Где я ошибаюсь / эта ошибка появляется, когда я пытаюсь добавить пользователя, выбирающего чтение обозначения из таблицы обозначений.

пользователь hbm как показано ниже

<hibernate-mapping> 
  <class name="com.User" table="USER">                            
    <id column="USER_ID" name="id" > 
      <generator class="assigned">
      </generator> 
    </id> 
    <property column="d_name" name="dName"/>

 </class> 
</hibernate-mapping> 

обозначение HBM как показано ниже

<hibernate-mapping> 
  <class name="com.Designation" table="Designation"> 
    <id column="d_name" name="dName" > 
      <generator class="assigned"> 

      </generator> 
    </id> 

 </class> 
</hibernate-mapping> 

и код для сохранения

Session session = HibernateUtil.getSession(); 
Transaction tx = session.beginTransaction(); 
session.save(user); 
tx.commit();

Ответы [ 2 ]

0 голосов
/ 19 апреля 2010

вы говорите, что свойство "dname" com.User ссылается на идентификатор типа com.designation. Я полагаю, вы смоделировали это в базе данных следующим образом, а столбец d_name в таблице user является внешним ключом для d_name в обозначении таблицы.

Это означает, что вы не можете сохранить объект пользователя, если вы также не сохраните объект назначения, на который он ссылается. Также, если ограниченная проверка не может быть отложена до конца транзакции, как в случае mysql, важно сначала вставить ссылочный объект. Может быть, есть даже ненулевое ограничение на этот внешний ключ.

В любом случае вы должны объявить эту связь также между вашими объектами, чтобы hibernate знал об этом и мог выполнять операторы вставки в правильном порядке. То есть в типе com.user вы не должны использовать элемент свойства, а что-то вроде:

<hibernate-mapping>
  <class name="com.User" table="USER">                            
    <id column="USER_ID" name="id" > 
      <generator class="assigned"></generator> 
    </id>
    <many-to-one
      name="dName"
      column="d_name" />
  </class> 
</hibernate-mapping>

Пожалуйста, ознакомьтесь с главой 7 документации ядра hibernate .

С уважением David

0 голосов
/ 19 апреля 2010

Трудно дать вам точную проблему, не видя ни кода, ни ваших отображений, но вы "установили" обозначение для пользователя, прежде чем сохранить его?

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