我發現這篇文章其中談到使用Spring作爲JPA容器:使用Spring的JPA容器
http://java.sys-con.com/node/366275
我從來沒有使用過Spring在此之前,我試圖使這項工作,並希望有人能幫我。
在文章中,它聲明您需要使用@Transactional註解Spring bean,並使用@PersistenceContext註釋方法/域以提供事務支持並注入實體管理器。
是否有定義bean爲「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();
}
}
本來我只是有這個peristence背景註釋:
@PersistenceContext(unitName="MyData")
private EntityManager em;
,但有一個空的他們,當被調用findWithNamedQuery。然後我註釋了這些方法,但em仍然是空的(沒有注入?)。
我想知道這是否與我的bean沒有被識別爲「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文件,因爲文章從來沒有具體說過哪個文件是「應用程序上下文」文件。如果這是錯誤的,請讓我知道。
與其閱讀關於如何在某些網站上做這些東西,你是否閱讀過Spring文檔? http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa – skaffman 2010-06-09 21:00:11
感謝您的鏈接。我實際上已經發現/閱讀了Spring文檔的一部分,但是它沒有提供任何關於我的配置可能出錯的信息。我對搜索「Spring bean」的搜索過於籠統,搜索不到任何合理的結果。 – sdoca 2010-06-09 22:20:01
您正在使用哪種JPA實現? Spring不是JPA容器,但它與一個(例如Hibernate)集成。 – skaffman 2010-06-10 07:15:04