2013-08-18 2 views
1

У меня есть 2 классов:Hibernate сужать ленивую заряженную коллекцию

public class Car { 
    private Integer id; 
    private List<CarOrder> carOrders; 
} 

public class CarOrder { 
    private Car car; 
    private Long endDate; 
    private Long id; 
} 

и спящего режим отображение

<class entity-name="car" name="test.es.Car" table="CARS" schema="ARK_ES"> 
     <cache usage="read-write"/> 
     <id name="id" column="ID"> 
      <generator class="sequence"> 
       <param name="sequence">ES_SEQUENCE</param> 
      </generator> 
     </id> 
     <bag name="carOrders" inverse="true" lazy="true"> 
      <cache usage="read-write"/> 
      <key column="CAR_ID"/> 
      <one-to-many not-found="ignore" entity-name="carOrder"/> 
     </bag> 
    </class> 
    <class entity-name="carOrder" name="temp.es.CarOrder" table="CAR_ORDERS" schema="ARK_ES"> 
     <cache usage="read-write"/> 
     <id name="id" column="ID"> 
      <generator class="sequence"> 
       <param name="sequence">ES_ORDER_SEQUENCE</param> 
      </generator> 
     </id> 
     <property name="endDate" column="END_DATE"/> 
     <many-to-one name="car" entity-name="car"> 
      <column name="CAR_ID"/> 
     </many-to-one> 
    </class> 

нужно загрузить все автомобили и заказы автомобилей с ENDDATE больше некоторого значения. Также мне нужно кэшировать запрос для заказа автомобиля. Я попытался использовать фильтры спящего режима, но они не кэшированы. Можно ли достичь этого с помощью hibernate api без пользовательских запросов? Я забыл упомянуть, что у машины нет заказов, но это должно быть в результате.

Спасибо.

+0

Пожалуйста, добавьте четко поставленный вопрос на ваш пост. – Gidil

+0

Я добавил вопрос. Скажите, пожалуйста, что вы имеете в виду, если этого недостаточно. –

+0

Намного лучше. Спасибо! – Gidil

ответ

0

Таким образом, вы можете использовать аннотацию @fitler и @filterdef в своем классе коллекции. Но тогда очень важно включить фильтры в сеансе. Следуйте этой ссылке, как включить фильтры, они по умолчанию не включены. How to enable hibernate filter for sessionFactory.getCurrentSession()?

+0

Да, я уже пробовал фильтры, и они отлично работают. Проблема в том, что результаты фильтрации не кэшируются, и каждый раз, когда я повторяю сбор, я получаю новый запрос к базе данных. –

+0

Вы включили кеш уровня запросов? –