Hibernate - уровень класса @ Где аннотации не применяются в коллекциях этого класса? - PullRequest
3 голосов
/ 25 октября 2011

Я аннотировал сущность Hibernate с атрибутом @Where на уровне класса. Это ограничивает, какие объекты загружаются, когда я запрашиваю его напрямую, но, похоже, он не применяется к коллекциям этого класса. Этого следовало ожидать?

Документы не ясны по этому вопросу: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-class

где (необязательно): указывает произвольное условие SQL WHERE, которое должно быть используется при получении объектов этого класса.

Мне кажется, что это применимо ко всем случаям, когда объекты этого класса извлекаются, но я наблюдал, что это игнорируется для коллекций.

  1. Это должно работать для коллекций?
  2. Если нет, то как лучше всего применить фильтр глобально ко всем экземплярам класса и ко всем коллекциям этого класса?

(ОБНОВЛЕНИЕ: я поднял https://hibernate.atlassian.net/browse/HHH-6781, чтобы отследить проблемы с документами.)

1 Ответ

1 голос
/ 08 марта 2016

@ Где на уровне класса будут отсутствовать нежелательные экземпляры при использовании «getAll» или «loadAll».Наличие @Where на уровне класса не будет «каскадно» применяться к коллекциям этой сущности.

@ Где на уровне свойств коллекции открытый класс PuppySeller {

    @Where(clause = "status='FOR_SALE'")
    public Set<Puppy> getPuppiesForSale() {}

будет гарантировать, чтоКогда вы выбираете «PuppySeller» из БД, «puppiesForSale» будет заполняться только щенками со статусом «FOR_SALE».

Однако будьте очень осторожны, поскольку это применимо только к коллекциям первого уровня.Под этим я подразумеваю, что у вас есть щенок, и вы хотите, чтобы все щенки были выставлены на продажу одним и тем же продавцом.Вы можете сделать что-то вроде «myPuppy.getPuppySeller (). GetPuppiesForSale ()».Однако, если вы сделаете это, вы в конечном итоге получите всех щенков, независимо от статуса, принадлежащих puppySeller, включая всех щенков "SOLD" или "NEWBORN" и т. Д.

...