Ассоциация отображения гибернации OneToMany с ограничением ограничений - PullRequest
1 голос
/ 24 ноября 2010

У меня есть следующий код:

@Entity
class A{
  @Id
  private Long id;
  @OneToMany(fetch = FetchType.LAZY, mappedBy = "a", cascade = CascadeType.ALL)
  private List<B> bs =new ArrayList<B>();
...
}

@Entity
class B{
  ...

  @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.ALL)
  @JoinColumn(name = "aId", nullable = false)
  private A a;
}

Я хочу, чтобы спящий режим НЕ сохранялся A, если bs.isEmpty ().

с этим кодом Hibernate сохраняется A, даже если внутри него нет объектов B.

Знаете ли вы какое-нибудь решение для этого?

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

1 Ответ

0 голосов
/ 24 ноября 2010

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

Я думаю, что вы можете попросить реализовать Event Listener , который получает все выполняемые вставки.См. Руководство по Hibernate, глава 12.2 - Система событий и javadoc для PreInsertEventListener .В частности, я считаю, что этот метод может быть полезен для вас:

boolean     onPreInsert(PreInsertEvent event)
          Return true if the operation should be vetoed

Из пройденного события вы получаете экземпляр объекта, который будет вставлен через метод getEntity() PreInsertEvent.
Верните true в методе onPreInsert, и вы прекратите вставку.

Не забудьте установить прослушиватель в файл hibernate.cfg.xml.

...