首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在JPA中未定义为非jta数据源

在JPA中未定义为非jta数据源
EN

Stack Overflow用户
提问于 2011-02-20 02:51:59
回答 3查看 9.3K关注 0票数 0

我将JPA映射到HSQLDB和persistence.xml,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
<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定义的数据源。我在配置中是否遗漏了什么?

你好,萨蒂亚

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-20 03:07:37

我通过删除transaction-type="RESOURCE_LOCAL"并将java:hmc更改为java:/hmc来使其正常工作。但是现在,每当我尝试持久化时,我的应用程序都会遇到另一个问题。

它抛出:java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()

谁能告诉我如何在JTA模式下获得连接并启动事务?

致以敬意,

萨蒂亚

票数 -1
EN

Stack Overflow用户

发布于 2013-03-14 22:01:08

  1. 如果持久性单元的事务类型为JTA,则jta-datasource元素用于声明将用于获取连接的JTA数据源的JNDI名称。这是常见的情况。
  2. 如果持久性单元的事务类型是资源本地的,则应使用非JTA- data -source来声明非JTA数据源的JNDI名称。
票数 2
EN

Stack Overflow用户

发布于 2014-04-23 04: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更改为:

代码语言:javascript
代码运行次数:0
运行
复制
<!-- 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它在哪里,用什么名字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5052814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档