Возможно ли иметь отношение @OneToOne между 2 объектами, но при этом ребенок не будет автоматически сохранен в Hibernate? - PullRequest
2 голосов
/ 30 ноября 2010

Я использую аннотации устойчивости jpa. У меня есть 2 объекта, Order (родитель) и Transaction (дочерний). Я хочу быть в состоянии получить мой одер и получить его транзакцию. Проблема в том, что я не хочу, чтобы моя транзакция автоматически сохранялась при сохранении моего заказа. Мне нужно выполнить специальную обработку, прежде чем я сохраню его.

Есть ли способ сказать Hybernate, чтобы он не сохранял дочерний объект, а продолжал получать его при получении заказа?

Я пробовал что-то вроде этого

@OneToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name = "commande_id", insertable=false, updatable=false)

Это не сработало. Я продолжаю получать это сообщение:

объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом

Когда я пытаюсь сохранить объект заказа. При первом сохранении заказа объект транзакции содержит некоторые данные, но еще не готов к сохранению.

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

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Что если вы отсоедините транзакцию от сеанса?

session.evict(transaction);

Не уверен, что это сработает, но просто идея.

1 голос
/ 30 ноября 2010

Вы могли бы сделать отношения двунаправленными и контролируемыми стороной транзакции.

Что-то вроде

class Order {
  @OneToOne(mappedBy="order", cascade={}, insertable=false, updatable=false)
  private Transaction transaction;
}

class Transaction {
  @OneToOne(name = "order_fk")
  private Order order;
}

Если вы сделаете это таким образом, порядок order.transaction не будет иметь записивлияние на базу данных.Но даже если это работает, я верю, что это взлом.

...