我将JPA映射到HSQLDB和persistence.xml,如下所示:
<persistence-unit name="HMC">
<jta-data-source>java:hmc</jta-data-source>
<class>org.hmc.jpa.models.BloodGroup</class>
<class>org.hmc.jpa.models.ContactInfo</class>
<properties>
<property
name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
</properties>
</persistence-unit>
但无论何时部署应用程序,它都会抛出RuntimeException,说:Specification violation [EJB3 JPA 6.2.1.2] - You have not defined a non-jta-data-source for a RESOURCE_LOCAL enabled persistence context named: ABC
我也有用JBoss定义的数据源。我在配置中是否遗漏了什么?
你好,萨蒂亚
发布于 2011-02-19 19:07:37
我通过删除transaction-type="RESOURCE_LOCAL"
并将java:hmc
更改为java:/hmc
来使其正常工作。但是现在,每当我尝试持久化时,我的应用程序都会遇到另一个问题。
它抛出:java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()
谁能告诉我如何在JTA模式下获得连接并启动事务?
致以敬意,
萨蒂亚
发布于 2013-03-14 14:01:08
发布于 2014-04-22 20:16:48
发生的事情是JBoss自动扫描和验证名为persistence.xml的文件,因为您使用spring来管理beans,我猜您没有使用EJB3。
需要理解的是,如果您希望JBoss为您控制JTA事务,如果您想使用JBoss事务管理器,或者如果您只想做JPA事务,而不需要JTA事务控制。
如果您只想使用JPA事务并跳过JBoss TransactionManagener,您只需将您的persistence.xml文件重命名为spring-JBoss.xml(或您喜欢的任何名称),并且在spring-context.xml .xml文件中,您可以将您的entityManagerFactory更改为:
<!-- JPA primary EntityManagerFactory -->
<bean id="entityManagerFactory" lazy-init="true"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:persistenceUnitName="ExamplePU"
p:persistenceXmlLocation="classpath:/META-INF/spring-persistence.xml"
p:jpaVendorAdapter-ref="jpaVendorAdapter"
p:jpaDialect-ref="jpaDialect"
p:dataSource-ref="dataSource"/>
发生的情况是,通过重命名文件,JBoss将不会验证它,因为您在EJB规范之外工作,并且没有使用任何EJB,所以JBoss无论如何都不应该扫描这个文件。既然你重命名了它,你需要告诉spring它在哪里,用什么名字。
https://stackoverflow.com/questions/5052814
复制