Hibernate и JPA: как сделать ограничение внешнего ключа для строки - PullRequest
1 голос
/ 21 февраля 2011

Я использую Hibernate и JPA.Если у меня есть две простые сущности:

@Entity
@Table(name = "container")
public class Container {
  @Id
  @Column(name="guid")
  private String guid;
}

@Entity
@Table(name="item")
public class Item {
  @Id
  @Column(name="guid")
  private String guid;

  @Column(name="container_guid")
  private String containerGuid;
}

, и я хочу убедиться, что вставка элемента не удалась, если указанный контейнер не существует.Я бы предпочел, чтобы объект Container не заполнялся внутри объекта item (ManyToOne), как бы я это сделал, если это возможно?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Вы можете объявить произвольное ограничение, используя атрибут columnDefinition:

@Column(name="container_guid", 
     columnDefinition = "VARCHAR(255) REFERENCES container(guid)")
private String containerGuid;

Обратите внимание, однако, что Hibernate ничего не знает об этом ограничении, так что, например, он может не выполнять вставки вправильный порядок в отношении этого и т. д.

Поэтому было бы лучше создать отношение @ManyToOne.Если вы боитесь дополнительного SQL-запроса для Container, необходимого для установки этого свойства, вы можете использовать Session.load() / EntityManager.getReference(), чтобы получить прокси-сервер без выдачи актуального запроса.

0 голосов
/ 21 февраля 2011
Try using below relationship mapping

Отображение RelationShip @OneToOne (cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@ManyToOne () @ManyToMany ()

<> @JoinColumn (name = "<>")

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