Java Don';我不知道jta数据源应该是什么

Java Don';我不知道jta数据源应该是什么,java,spring,hibernate,tomcat,jta,Java,Spring,Hibernate,Tomcat,Jta,我试图让SpringMVC、Hibernate、JTA和Postgres服务器一起工作 我让大部分的东西都能工作(在没有JTA的情况下通过EntityManager从Db读取),但我无法让事务与JTA一起工作 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w

我试图让SpringMVC、Hibernate、JTA和Postgres服务器一起工作

我让大部分的东西都能工作(在没有JTA的情况下通过EntityManager从Db读取),但我无法让事务与JTA一起工作

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="defaultPersistenceUnit" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>???</jta-data-source>
    <class>net.test.test.database.UsersEntity</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/mydb" />
        <property name="javax.persistence.jdbc.user" value="postgres"/>
        <property name="javax.persistence.jdbc.password" value="validpw"/>
    </properties>
</persistence-unit>

我还找到了一些资源,它们说应该在应用服务器中定义数据源(但我不确定这一点)。如果这很重要,我会使用Tomcat服务器

Tomcat没有提供JTA支持。您必须使用完整的JEE服务器,如JBoss、WebLogic或Glasshfish,才能使用JTA(或使用XA事务管理器,如Bitronix)。但是你真的需要JTA吗?您打算让事务跨越多个数据库或JMS服务吗?非常感谢!这就是问题所在。我改用Glassfish,现在我不再犯这个错误:)我可能不需要JTA,但这只是一个测试项目,它的目的是了解这些库。只是想玩玩。我现在有另一个问题。当我执行em.persist(用户)时;它根本不会保存到数据库中。下一次执行时出现错误:具有相同标识符值的另一个对象已与会话[net.test.test.database.UsersEntity#0]关联。您知道为什么会发生这种情况吗?不,不知道更多细节(代码、配置、事务处理等)就知道。好的,没问题。正如我所说,包含在事务注释中的em.persist就是所有代码。(注意:像find()这样的非写东西是有效的)。我应该提供哪种配置来帮助您呢?如果我执行命令:UsersEntity u=em.find(UsersEntity.class,1l);u、 setName(u.getName()+“-”);u.getName()每次迭代都会获得一行额外的代码,但数据库不会保留任何额外的代码行。我无法对数据库进行任何更改。如果我尝试提交它,会出现以下错误:无法在容器管理的EntityManager上执行getTransaction()。如何让我的应用程序提交更改并将其保存到数据库中?
DataSourceLookupFailureException: Failed to look up JNDI DataSource with name 'dataSource'