Sql server JPA不写入表

Sql server JPA不写入表,sql-server,hibernate,jpa,transactions,jboss6.x,Sql Server,Hibernate,Jpa,Transactions,Jboss6.x,我有下面的JPA代码,检查所有值后,票证包含一个有效的bean,它结束时没有异常,等等。它被执行,它不会抛出任何异常,但最终没有数据写入表中 我还尝试从表中检索bean,如果它是空的,那么就不会返回任何数据 设置是 JBoss6.1最终版 来自MS的SQLServer2008Express驱动程序SQLJDBC3 持久性代码: public String saveTicket() { System.out.println("Controller saveTicket() "); Enti

我有下面的JPA代码,检查所有值后,票证包含一个有效的bean,它结束时没有异常,等等。它被执行,它不会抛出任何异常,但最终没有数据写入表中

我还尝试从表中检索bean,如果它是空的,那么就不会返回任何数据

设置是

JBoss6.1最终版

来自MS的SQLServer2008Express驱动程序SQLJDBC3

持久性代码:

public String saveTicket() {
  System.out.println("Controller saveTicket() ");
  EntityManagerFactory factory = Persistence.createEntityManagerFactory("GesMan"); /* I know it would be better to share a single instance of factory, this is just for testing */
  EntityManager entityMan = factory.createEntityManager();
  entityMan.persist(this.ticket);
  entityMan.close();
}
持久化单元是

<?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="GesMan" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/GesManDS</jta-data-source>
    <class>es.caib.gesma.gesman.Ticket</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
      <property name="hibernate.transaction.manager_lookup_class"
      value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
      <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>
</persistence>
数据源

<datasources>
  <local-tx-datasource>
    <jndi-name>GesManDS</jndi-name>
    <connection-url>jdbc:sqlserver://spsigeswnt14.caib.es:1433;DatabaseName=TEST_GESMAN</connection-url>
    <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
    <user-name>thisis</user-name>
    <password>notthepassword</password>
    <check-valid-connection-sql>SELECT * FROM dbo.Ticket</check-valid-connection-sql>
    <metadata>
      <type-mapping>MS SQLSERVER</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

在关闭之前调用entityMan.flush或transaction.commit,否则它将放弃关闭时排队的所有更改。

最后,看起来我使用了错误的方法。。。。在JBoss中,我不能像在JSE中那样直接访问JPA,这是最好的说法

我最终创建了一个带有事务的EJB,并将所有JPA逻辑传递到了那里


PS:当然,如果我错了,请现在告诉我这更像是一个学术问题,但我还是想知道,flush导致了一个异常,告诉我它需要在一个交易中;我无法手动开始设置EJB并让容器完成所需的事务。您是如何配置事务管理的?它是容器管理的还是bean管理的?