Hibernate 3 OneToOne работает с PostgreSQL - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть отношения: у Клиента есть Аккаунт. Таким образом, следующая реализация

Account.class:

@Column(name = "client_id")
    @GeneratedValue(generator = "gen")
    @GenericGenerator(name = "gen", strategy = "foreign",
           parameters = { @Parameter(name = "property", value = "clientDTO") })
    private int client_id;

Client.class:

@OneToOne(cascade = CascadeType.ALL)
private AccountDTO accountDTO;

Я запускаю клиент, учетную запись и настраиваю учетную запись для клиента, но когда я пытаюсь сохранить ее в db, я получаю исключение:

java.sql.BatchUpdateException: пакетная запись 0 вставляется в public.accounts (баланс, client_id, комментарий, credit_limit, id) значения (1000.0, 0, комментарий, 0.0, 8) был прерван. Вызовите getNextException для увидеть причину.

Как видите, мое приложение попыталось вставить учетную запись с client_id = 0;

Как я могу решить это?

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Используйте java.lang.Integer вместо примитива int - так Hibernate может сказать, что он еще не установлен, и его нужно сгенерировать (или передать как ноль).Или вы можете указать unsaved-value = 0 (но не знаете, как это сделать из аннотаций)

0 голосов
/ 13 декабря 2011

Я решил это. Основная проблема - двунаправленные отношения. Поэтому я должен был установить Учетную запись для Клиента, а Клиент для Учетной записи Спасибо за все!

0 голосов
/ 13 декабря 2011

Посмотрите на мой ответ на этот связанный вопрос . Вам не нужен дополнительный столбец client_id в таблице account, если значение должно совпадать с идентификатором таблицы account. Вы можете сделать идентификатор таблицы счетов первичным ключом и внешним ключом, ссылающимся на таблицу client.

И это то, что предлагает использование @GenericGenerator с strategy = 'foreign', но вам не хватает аннотации @PrimaryJoinColumn. Кроме того, ваше свойство @OneToOne находится не на той стороне. Согласно вашему исключению, учетная запись должна ссылаться на Клиента, а не наоборот.

НТН

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