Java 与玻璃鱼一起冬眠4.1
我已经在Glassfish 4.1上设置了Hibernate,但是我在持久性方面遇到了问题。 我能够读取数据,但无法写入BD(更改似乎未提交) 我当前的persistent.xml如下所示: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
<?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