Если вам интересно узнать, как настроить EntityManager в JPA, посмотрите это:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="emf"/>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:showSql="${hibernate.show_sql}"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
<property name="packagesToScan" value="com.books.web.entities"></property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
После того, как вы получили свои bean-компоненты, вы можете использовать аннотацию для получения JPATransactionManager и использовать ее для получения EntityManagerFactory ииспользуйте фабрику, чтобы получить EntityManager, а затем вы можете создать свой запрос / именованный запрос. и т. д.
Где-нибудь поверх атрибутов члена вашего класса, автоматически подключите транзакциюManager, используя следующую команду:
@Autowired
private JpaTransactionManager transactionManager;
public List<Book> findBookByCategory(String category){
EntityManagerFactory entityManagerFactory = transactionManager.getEntityManagerFactory();
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
List<Book> result = entityManager.createNamedQuery( "Book.findByCategory", Book.class )
.setParameter("category", category)
.getResultList();
entityManager.getTransaction().commit();
entityManager.close();
return result;
}
Бины в верхней части этого поста ссылаются на некоторые свойства, которые находятся в файле свойств, поэтому убедитесь, что у вас есть файл hibernate.properites со значениями, как показано ниже:
hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.show_sql true
hibernate.hbm2ddl.auto update
hibernate.generate_statistics true
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://localhost:3306/foobardb?useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf-8
hibernate.connection.username put_user_name_here
hibernate.connection.password put_password_here
hibernate.connection.CharSet utf8
hibernate.connection.characterEncoding utf8
hibernate.connection.useUnicode true
Для бинов, которые будут успешно созданы, вынужны hibernate-jpa jar, и вам также может понадобиться hibernate jar validator.Если вы используете maven для управления зависимостями в вашем проекте, используйте следующие зависимости:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring.data.jpa.version}</version>
<exclusions>
<exclusion>
<artifactId>junit-dep</artifactId>
<groupId>junit</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- JPA -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
Надеюсь, это поможет:)