Hibernate: фильтрует ли родительская сущность неявную фильтрацию дочерней сущности? - PullRequest
2 голосов
/ 28 ноября 2010

Предположим, есть две сущности EntityA и EntityB.Две таблицы определены для обеих сущностей.EntityB является дочерней сущностью EntityA.Теперь в java pojos, использующем аннотацию hibernate, я определил два класса, соответствующих таблицам EntityA и EntityB, как показано ниже.

    @FilterDef(name = "myfilter", parameters = { @ParamDef(name = "year", type = "int") }, defaultCondition = ":year = year")

    public class EntityA

    {

       @OneToMany(mappedBy="EntityA")
       List<EntityB> getEntityBList()
       { 
       }

    } 


    public class EntityB
    {

      @ManyToOne
      @joincolumn(name="entityA_id") 
      EntityA getEntityA()
      {
      }

    }

Поскольку у меня есть фильтр на EntityA.Неявно ли, что в EntityB будут загружаться только те объекты, которые соответствуют отфильтрованным объектам EntityA с учетом родительских и дочерних отношений, или нужно явно поместить фильтр в EntityB?

Пример, если EntityA фильтруется так, что объекты соответствуют году2010 загружен только.Я хочу, чтобы загруженный объект EntityB был только тем, который является дочерним по отношению к объектам EntityA, соответствующим только 2010 году.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

У меня была такая же проблема.Оказалось, что вам нужно определить фильтр для EntityB, в котором вы явно указываете ссылку на EntityA, например

<filter 
    name="myFilter" 
    condition="((select a.myProperty from EntityA a where a.id = entityA_id) = :myPropertyParam)" 
/>

. Как вы видите, я использовал xml для своих определений гибернации.Я уверен, что это также возможно с аннотациями.

1 голос
/ 15 декабря 2010

Если EntityB никогда не запрашивается напрямую, но всегда загружается через entityA.getEntityBList(), ваш фильтр будет работать. Но если вы запросите EntityB напрямую, результаты не будут отфильтрованы. Думайте о фильтрах как об ограничительных предложениях, включенных в часть WHERE всего SQL, запускаемого Hibernate для загрузки EntityA.

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