your starter example entitymanagerfactory defining data consider bean java hibernate spring jpa

java - starter - ¿Cómo configurar JPA con Spring 3?



spring jpa configuration (3)

Alternativamente, Spring 3+ y JPA 2.0 se pueden integrar con la ayuda de proxies dinámicos.

Puedes encontrar toda la documentación y descargar el ejemplo here

En este caso, las interfaces con consultas JPA nombradas se utilizan para ejecutar consultas. Las interfaces se tratan como frijoles de primavera comunes con la ayuda de proxies dinámicos. Se pueden inyectar (o autorizar) en cualquier otro frijol de la misma manera.

Las consultas también pueden ubicarse en archivos orm-mapping.xml separados y dividirse por dominio (o según su conveniencia). Eso le da una gran flexibilidad y capacidad de mantenimiento a la capa persistente.

public interface OrganisationQueries { @Query(named = "find.organisation.by.role.id") public Organisation findOrganisationByRoleId(Long roleId); @Query(named = "find.all.organisations") public List<Organisation> findAllOrganisations(); } public class OrganisationServiceImpl implements OrganisationService { @PersistenceContext private EntityManager em; @Autowired private OrganisationQueries organisationQueries; @Override public Organisation findOrganisationByRoleId(Long roleId) { return organisationQueries.findOrganisationByRoleId(roleId); } @Override public List<Organisation> findAllOrganisations() { return organisationQueries.findAllOrganisations(); } } <entity-mappings xmlns="..." version="1.0"> <named-query name="find.organisation.by.role.id"> <query><![CDATA[ select r.organisation from Role r where r.id =?1 ]]></query> </named-query> <named-query name="find.all.organisations"> <query><![CDATA[ select org from Organisation org left join fetch org.organisationType ]]></query> </named-query> </entity-mappings>

He estado leyendo la documentación de Spring, pero debo decir que es un poco confuso, dando varias opciones diferentes sobre cómo configurar JPA.

¿Cuál es la mejor manera, y cómo, para obtener JPA 2 (con hibernación) configurado con el muelle 3? Si tiene un ejemplo de pom, web.xml, applicationContext.xml y cualquier código java necesario, puede publicarlo también.

¡Gracias!


Le sugiero que eche un vistazo a Spring Roo, crea un proyecto web de Spring junto con el pom y todos los archivos de configuración necesarios (por ejemplo, JPA). Y si no te gusta Roo, puedes soltarlo y amenazar el proyecto como lo es la aplicación Spring Web habitual. En mi humilde opinión, la forma más rápida de obtener una configuración inicial del proyecto.


Yo uso EclipseLink, pero la configuración debe ser muy similar. Aquí tienes las partes más importantes.

pom.xml:

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.0.0</version> </dependency>

persistence.xml:

<?xml version="1.0" encoding="UTF-8" ?> <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_2_0.xsd" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL" /> </persistence>

applicationContext-dao.xml:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation" value="classpath:persistence.xml" /> <property name="persistenceUnitName" value="persistenceUnit" /> <property name="dataSource" ref="dataSource"/> <property name="jpaPropertyMap"> <props> <prop key="eclipselink.weaving">false</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven transaction-manager="transactionManager" />

Usuario.java:

@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Integer id; private String name; // Getters and setters }

UserDao.java:

@Repository public class JpaUserDao implements UserDao { @PersistenceContext private EntityManager em; @Override public Item get(Integer id) { return em.find(User.class, id); } }

UserService.java:

@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Transactional @Override public User getUser(Integer id) { return userDao.get(id); } }

Espero eso ayude.