Я нашел эту статью, в которой говорится об использовании Spring в качестве контейнера JPA:
http://java.sys -con.com / node / 366275
Я никогда не использовалSpring до этого, и я пытаюсь заставить это работать, и надеюсь, что кто-то может помочь мне.
В статье говорится, что вам нужно аннотировать bean-компонент Spring с @Transactional, а методы / поля с @PersistenceContext, чтобы обеспечитьподдержка транзакций и внедрение менеджера сущностей.
Есть ли что-то, что определяет бин как "Spring Bean"?У меня есть bean-класс, который реализует операции CRUD с сущностями, используя обобщенные значения:
@Transactional
public class GenericCrudServiceBean implements GenericCrudService
{
@PersistenceContext(unitName="MyData")
private EntityManager em;
@Override
@PersistenceContext
public <T> T create(T t)
{
em.persist(t);
return t;
}
@Override
@PersistenceContext
public <T> void delete(T t)
{
t = em.merge(t);
em.remove(t);
}
...
...
...
@Override
@PersistenceContext
public List<?> findWithNamedQuery(String queryName)
{
return em.createNamedQuery(queryName).getResultList();
}
}
Изначально у меня была только эта аннотация контекста постоянства:
@PersistenceContext(unitName="MyData")
private EntityManager em;
, но при вызове findWithNamedQuery было нулевое em,Затем я также прокомментировал методы, но они все еще нулевые (без инъекций?).
Мне было интересно, не связано ли это с тем, что мой бин не распознается как «Spring».
Я выполнил настройку как мог, следуя указаниям в статье, включая настройку следующего в моем файле context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:tx="http://www.springframework.org/schema/tx"
tx:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="MyData" />
<property name="dataSource" ref="dataSource" />
<property name="loadTimeWeaver"
class="org.springframework.classloading.ReflectiveLoadTimeWeaver" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:MySID" />
<property name="username" value="user" />
<property name="password" value="password" />
<property name="initialSize" value="3" />
<property name="maxActive" value="10" />
</bean>
<bean id="jpaAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="databasePlatform"
value="org.eclipse.persistence.platform.database.OraclePlatform" />
<property name="showSql" value="true" />
</bean>
<bean
class="org.springframework.ormmjpa.support.PersistenceAnnotationBeanPostProcessor" />
<tx:annotation-driven />
</beans>
Я догадался, что они принадлежали файлу context.xml, потому что статья никогдаконкретно сказано, какой файл является файлом "контекста приложения".Если это не так, пожалуйста, дайте мне знать.