Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与玻璃鱼一起冬眠4.1_Java_Hibernate_Glassfish_Hibernate Mapping_Jpa 2.1 - Fatal编程技术网

Java 与玻璃鱼一起冬眠4.1

Java 与玻璃鱼一起冬眠4.1,java,hibernate,glassfish,hibernate-mapping,jpa-2.1,Java,Hibernate,Glassfish,Hibernate Mapping,Jpa 2.1,我已经在Glassfish 4.1上设置了Hibernate,但是我在持久性方面遇到了问题。 我能够读取数据,但无法写入BD(更改似乎未提交) 我当前的persistent.xml如下所示: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2

我已经在Glassfish 4.1上设置了Hibernate,但是我在持久性方面遇到了问题。 我能够读取数据,但无法写入BD(更改似乎未提交)

我当前的persistent.xml如下所示:

 <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="myPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/myDataSource</jta-data-source>
    <properties>
      <property name="transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
      <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory"/>
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
    </properties>
  </persistence-unit>
</persistence>
@PersistenceContext
private EntityManager em;

public void updateUser(User u) {
        em.merge(u);
}
你知道我该怎么解决吗


谢谢

请尝试以下配置:

    <?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="YOUR_PERSISTANCE_NAME" transaction-type="RESOURCE_LOCAL">
        <provider>YOUR_PROVIDER</provider>

        <!-- ENTITIES -->
        <class>com.company.project....EntityA</class>
        <class>com.company.project....EntityB</class>
        <class>com.company.project....EntityC</class>

        <properties>
            <property name="javax.persistence.jdbc.url" value="YOUR_URL_TO_DB" />
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.user" value="USER" />
            <property name="javax.persistence.jdbc.password" value="PASS" />
            <property name="eclipselink.logging.level" value="INFO" />
            <property name="eclipselink.target-database" value="PostgreSQL" />
        </properties>
    </persistence-unit>

您的供应商
com.company.project…实体
com.company.project…实体
com.company.project…EntityC

在我的例子中,我正在用tomcat运行Hibernate 5,当我改为glassfish 4.1时停止工作

原因是最古老的jboss-logging.jar位于:“YOUR_GLASSFISH_FOLDER/GLASSFISH/modules”

为什么??hibernate 5依赖于jboss日志的最新版本,glassfish使用最旧版本,即使您在POM文件中声明了最新版本。实际上,我正在使用:

org.jboss.logging jboss-logging 3.3.0.Final
然后我下载并替换了modules path中旧的.jar,然后重新开始工作,我花了2天时间试图解决这个问题,我希望它对将来的一些问题有所帮助


我使用此链接来帮助我:

嘿,你是如何管理交易的?这看起来好像没有活动事务,或者它们没有被提交。您是否尝试过使用JtaTransactionFactory而不是CMTTransactionFactory?你能发布一个EJB的示例来保存数据吗?嗨,André,我试过使用JtaTransactionFactory,在这种情况下,应用程序挂起(看起来它在等待一个事务)。我的EJB使用容器管理器事务,在Wildfly 8.1上一切都很好。你能在glassfish上提供jta数据源配置吗?当然,André,这是个问题。谢谢您可以添加如何使用EJB注入事务吗?到目前为止,我没有发现任何错误:/如果你解释一下你的建议以及你认为这会有帮助的原因,这个答案会更好。嗨,Manu,我正在使用hibernate、MSSQLServer和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="YOUR_PERSISTANCE_NAME" transaction-type="RESOURCE_LOCAL">
        <provider>YOUR_PROVIDER</provider>

        <!-- ENTITIES -->
        <class>com.company.project....EntityA</class>
        <class>com.company.project....EntityB</class>
        <class>com.company.project....EntityC</class>

        <properties>
            <property name="javax.persistence.jdbc.url" value="YOUR_URL_TO_DB" />
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.user" value="USER" />
            <property name="javax.persistence.jdbc.password" value="PASS" />
            <property name="eclipselink.logging.level" value="INFO" />
            <property name="eclipselink.target-database" value="PostgreSQL" />
        </properties>
    </persistence-unit>
org.jboss.logging jboss-logging 3.3.0.Final