簡體   English   中英

Hibernate與Glassfish 4.1

[英]Hibernate with Glassfish 4.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/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>

我在Glassfish上的連接池配置是:

<jdbc-connection-pool datasource-classname="com.microsoft.sqlserver.jdbc.SQLServerDataSource" steady-pool-size="2" name="myPool" res-type="javax.sql.DataSource">
  <property name="TrustServerCertificate" value="false"></property>
  <property name="User" value="sa"></property>
  <property name="LastUpdateCount" value="true"></property>
  <property name="ResponseBuffering" value="adaptive"></property>
  <property name="URL" value="jdbc:sqlserver://server\bd"></property>
  <property name="XopenStates" value="false"></property>
  <property name="PacketSize" value="8000"></property>
  <property name="Password" value="mypass"></property>
  <property name="ApplicationName" value="Microsoft JDBC Driver for SQL Server"></property>
  <property name="DatabaseName" value="MyDB"></property>
  <property name="Encrypt" value="false"></property>
  <property name="LockTimeout" value="-1"></property>
  <property name="SendStringParametersAsUnicode" value="true"></property>
  <property name="MultiSubnetFailover" value="false"></property>
  <property name="ApplicationIntent" value="readwrite"></property>
  <property name="LoginTimeout" value="15"></property>
  <property name="WorkstationID" value="My-MacBook-Pro.local"></property>
  <property name="ServerName" value="xpto"></property>
  <property name="PortNumber" value="1433"></property>
  <property name="SelectMethod" value="direct"></property>
  <property name="SendTimeAsDatetime" value="true"></property>
</jdbc-connection-pool>

數據源配置:

<jdbc-resource pool-name="myPool" jndi-name="jdbc/myDataSource"></jdbc-resource>

我的EJB看起來像這樣:

@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>

在我的情況下,我使用tomcat運行Hibernate 5並在更改為glassfish 4.1時停止工作

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

為什么? hibernate 5依賴於最新版本的jboss-logging,即使你在POM文件中聲明了最新版本,glassfish也會使用最舊的版本。 其實我用的是:

org.jboss.logging jboss-logging 3.3.0.Final

然后我下載並替換模塊路徑中的舊.jar並重新開始工作,我花了2天時間嘗試解決這個問題,希望它有助於解決未來的問題= D

我用這個鏈接來幫助我: https//medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM