| Spring JPA lazy load |
[01 Nov 2009|05:47pm] |
| [ |
mood |
| |
creative |
] |
| [ |
music |
| |
Aphrodite - Listen To The Rhythm |
] |
Дано: - Spring framework 2.5 - Hibernate 3.2.5 - JPA - Netbeans для генерации классов сущностей и классов-контроллеров над сущностями.
Нужно: - осуществить доступ к свойствам (коллекциям) объектов-сущностей во View. Решения: // 1) Можно вынести все методы работы с коллекциями в соответствующие функции сервис уровня. В таком случае поздняя загрузка не требуется, но тогда может быть черезмерное количество различных методов. 2) Можно использовать позднее связывание и работать с функциями интерфейсов для получения свойств-коллекций разных объектов, нежели делать для каждой коллекции свой отдельный метод в сервисе. Что кажется более логичным и удобным.
Интересует 2-ой способ. ( По сути нужен рабочий вариант шаблона Open Session in View )
Искал неделю почти и совершенно случайно наткнулся на... ( *барабанная дробь* ) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
Я использовал частично аннотационный подход частично декларативный. В классах для работы с Entity объектами использовались @Transactional для класса @PersistenceContext для entityManager-а
Итак, что-бы заставить это хозяйство работать нужно: 1) Добавить в web.xml:
<filter> <filter-name>EMFFIlter</filter-name> <filter-class> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter </filter-class> </filter>
<filter-mapping> <filter-name>EMFFIlter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2) Добавить в applicationContext.xml:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" /> </bean> </property> <property name="dataSource" ref="dataSource"/> <property name="persistenceUnitName" value="persistenceUnitName"/> </bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> <property name="dataSource" ref="dataSource"/> </bean>
<tx:annotation-driven transaction-manager="txManager"/> <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
3) persistence.xml
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="persistenceUnitName" transaction-type="RESOURCE_LOCAL"> </persistence-unit> </persistence>
Итого: После генерации классов-контроллеров над классами-сущностями нужно модифицировать их путем комментирования кода отвечающего за работу с транзакциями и закрытием EntityManager`а т.к. через @PersistenceContext аннотацию используется Shared EntityManager Также надо не забыть прописать этим классам аннотацию @Transactional для использования транзакций.
Собстно все. Должно работать :)
|
|
| Ray Charles Robinson |
[04 Sep 2009|01:11am] |
| [ |
mood |
| |
impressed |
] |
 One Of The Best Films I Ever Saw...(c)
|
|
| Terminator Salvation |
[25 Aug 2009|11:24pm] |
| [ |
music |
| |
Terminator one theme |
] |

Посмотрел. Понравилось. Может быть и не столь эпический как первый, но, как говорится: "... раньше и сахар был слаще и вообще всё лучше ... "
|
|
| Музыкант :) |
[24 Jun 2009|12:10pm] |
| [ |
mood |
| |
optimistic |
] |
|
|
| Кулинарное. |
[08 Mar 2009|07:47pm] |
| [ |
mood |
| |
tired |
] |
В кастрюле булькает вода, Кипит чудесный суп. Но жаль не повар - овощь я. Мне пробу не дадут.
|
|
| One step closer |
[01 Mar 2009|02:00pm] |
| [ |
mood |
| |
optimistic |
] |
| [ |
music |
| |
Aphrodite feat Big Daddy - Off limits |
] |
Получил ошибку NoClassDefFoundError при использовании класса UnsupportedOperationException :D
UPD: MessageDigest, туда же.
ЗЫ: Affected Sony Ericsson, Siemens...
|
|
| Не прошло и года. |
[27 Feb 2009|09:58am] |
Собсно мемристор в действии.
Новый путь для дальнейшего наращивания производительности микросхем открыли специалисты лабораторий Hewlett-Packard (HP Labs). Они впервые на практике доказали работоспособность гибридных логических схем, составленных из мемристоров и транзисторов.
Тык
|
|
| Хорошо забытое старое |
[26 Feb 2009|01:32pm] |
| [ |
music |
| |
Manau - La tribu de Dana |
] |
Мельница - Тебя ждала я. Manau - La tribu de Dana ( альбом Panique Celtique - 1999 год )
Разные исполнители, разный смысл, но музыку Мельница у Manau таки подслушала или же это тот случай когда одна и та же тема пришла в голову разным людям :)
|
|
| Похоже. |
[22 Jan 2009|01:48pm] |
| [ |
mood |
| |
thoughtful |
] |
В московском метро ездят относительно новые типы вагонов, например на филевской линии. Так вот давно еще заметил что "юные" вагоны при остановке "кричат", а уже более старые, умудренные опытом, в большинстве своем едут тихо.. Как у людей :)
|
|
| Китайские души |
[05 Nov 2008|11:19pm] |
| [ |
mood |
| |
disappointed |
] |
| [ |
music |
| |
Tego Calderon - El Que No Lucha No Avanza |
] |
Не умеют все-таки китайцы делать душевые кабины :(
|
|
| Зенитит :) |
[30 Aug 2008|12:47am] |
| [ |
mood |
| |
satisfied |
] |
Суперкубок у Зенита :) Жгут... За год 2 еврокубка.
|
|
| Весна. |
[07 Jun 2008|12:50am] |
Просто прикольно и имхо, креативно.
ЗЫ: подсмотрел у: melkij_becc
|
|
| 15 лет спустя. |
[19 May 2008|11:00am] |
| [ |
mood |
| |
satisfied |
] |
Спустя 15 лет сборная России - чемпион мира по хоккею. Финальный матч - Россия:Канада 5:4 в овертайме. Ура :) Если учесть что Зенит выиграл УЕФА, то этот месяц впечатляет победами :)
|
|
| В Зените! :) |
[15 May 2008|12:37am] |
| [ |
mood |
| |
satisfied |
] |
Всем Гратц! :) Зенит выиграл УЕФА 2008!!!
|
|
| Прогноз погоды. |
[13 May 2008|06:06pm] |
| [ |
mood |
| |
disappointed |
] |
Стремно быть синоптиком. Посмотрел на данные, вроде все ок, спрогнозировал хорошую погоду, а тут - бах и коллапс, погода испортилась. Не круто... Не хочу быть синоптиком, но хочу что б светило солнце и была хорошая погода.
ЗЫ: А еще на ёлку влезть и зад не ободрать. И, прошу, ни слова про рыбку :)
|
|