Проблема отображения Hibernate один-к-одному / многие-к-одному - PullRequest
1 голос
/ 13 апреля 2011

У меня проблема с использованием Hibernate. У меня есть 3 таблицы: tb_user, tb_book, tb_lending. В tb_lending у меня есть следующие поля:

  • id_lending - int (11) - первичный ключ
  • id_user - int (11) - внешний ключ
  • id_book - int (11) - внешний ключ

У меня также есть Бины, представляющие таблицы (tb_user и tb_book работают отлично).

Мой tbLending.hbm.xml отображает это поле:

    <id name="id" type="java.lang.Integer">
        <column name="id_lending" />
        <generator class="identity" />
    </id>
    <many-to-one name="userId" class="com.wa2011.beans.UserBean"
        not-null="true" cascade="all" unique="true" column="id_user" />
    <many-to-one name="bookId" class="com.wa2011.beans.BookBean"
        not-null="true" cascade="all" unique="true" column="id_book" />

Исходя из бизнес-логики, связь должна быть взаимно-однозначной, поскольку для каждого id_lending у меня может быть 1 пользователь и 1 книга. Но я читал об этом таким образом на некоторых форумах, используя многие к одному, а затем объявляя unique = "true".

Но тогда, когда я выполняю query.save, я получаю следующую ошибку:

GRAVE: IllegalArgumentException в классе: com.wa2011.beans.UserBean, метод получения свойства: id

Я действительно не знаю, в чем проблема, так как tb_book и tb_user, как я уже говорил, работают, как талисман.

Метод сохранения в LendingBean.java:

public void saveLend(LendingBean lendingBean) {
    Session session = iniHibernate();

    try {
        session.beginTransaction();
        session.save(lendingBean);
        session.getTransaction().commit();

    } catch (Exception e) {
        System.out.println("Error on registering lend:");
        System.out.println(e);
    }
}

Этот метод вызывается сервлетом LendingActions внутри метода processRequest, по той же схеме, что и я с другими bean / сервлетами.

<class name="com.wa2011.beans.LendingBean" table="tb_lending" catalog="wa2011">
    <id name="id" type="java.lang.Integer">
        <column name="id_lending" />
        <generator class="identity" />
    </id>
...
</class> 

В LeandingBean.java у меня есть:

@Stateless
public class LendingBean {

   private Integer id;
   private Integer bookId;
   private Integer userId;

...
}

Не могли бы вы помочь мне, пожалуйста?

Заранее спасибо.

1 Ответ

0 голосов
/ 13 апреля 2011

Проверка элемента id компонента LendingBean для сопоставления. Это так же, как в картографии?

Я думаю, что ваш LendingBean должен быть таким:

@Stateless
public class LendingBean {

   private Integer id;
   private BookBean bookId;
   private UserBean userId;

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