簡體   English   中英

JBoss EJB transactions don't generate Oracle SQL Statements from JPA java persistence objetcs (eclipselink)

[英]JBoss EJB transactions don't generate Oracle SQL Statements from JPA java persistence objetcs (eclipselink)

我正在嘗試使用 Toplink 將 J2EE 重型應用程序 (jnlp) 從 Oracle OC4j (OAS) 遷移到使用 Eclipselink 的 RH JBoss (不更改 Beans 的功能代碼)。

如果只讀 java 指令在 SELECT SQL 語句中正確翻譯:

Session session = getSession();
ReadAllQuery query = new ReadAllQuery(Employee.class);
ExpressionBuilder builder = new ExpressionBuilder();
Expression criteres = builder.get("nom").equal("Smith");
query.setSelectionCriteria(criteres);
Vector employees = (Vector) session.executeQuery(query);
Employee employeeSmith = employees.elementAt(0);

==>

SELECT * FROM employee WHERE nom='Smith';

但是,寫 java 指令似乎沒有在相應的 SQL 語句中翻譯:

session.acquireUnitOfWork().deleteObject(employeeSmith);

==>

DELETE employee WHERE nom='Smith';

(對於 session.acquireUnitOfWork().registerObject(employeeSmith) 相同,既不會生成 INSERT 也不會生成 UPDATE SQL 語句)

JBoss 或 Eclipselink 參數中是否有任何設置以在 EJB 提交其事務時激活此“翻譯”?

I want to specify that I'm using "native" Oracle JDBC connection protocol with sessions.xml and a XML mapping file (correspondences between Oracle database tables/columns and Java classes/attributes objects), AND NOT persistence units (with persistence.xml定義文件和實體管理器)。

非常感謝您的幫助和建議。

問候

當前配置:Oracle OC4j 10.1.3.5.0 使用Toplink 11.1.1.2.0 JPA實現

目標配置:RedHat JBoss EAP 7.4 使用 Eclipselink 2.7.0 JPA 實現

只是一個與社區分享解決我的問題的方法的快速帖子:在 toplink -> eclipselink 遷移過程中,一些連接設置從 Java<->Oracle XML 映射文件 (XXX.xml) 和會話中移動。 xml文件:

<sessions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4.2">
  <session xsi:type="server-session">
    <name>XXX_session</name>
    <logging xsi:type="eclipselink-log">...</logging>
    <primary-project xsi:type="xml">XXX.xml</primary-project>
    <login xsi:type="database-login">...</login>
  </session>
</sessions>

我必須添加/移動以下標簽:

<server-platform xsi:type="jboss-platform">
   <enable-jta>true</enable-jta>
</server-platform>

<login xsi:type="database-login">
   <platform-class>org.eclipse.persistence.platform.database.OraclePlatform</platform-class>
   <external-connection-pooling>true</external-connection-pooling>
   <external-transaction-controller>true</external-transaction-controller>
   <sequencing>
      <default-sequence xsi:type="native-sequence">
         <preallocation-size>1</preallocation-size>
      </default-sequence>
   </sequencing>
   ...
</login>

通過這種方式,JPA 提供程序在容器的提交階段正確生成了寫入 Oracle 語句。

有關信息,會話的 XSD 字典。xml 是:/org/eclipse/persistence/eclipselink_sessions_2.1.Z24788D7B62B899D08B0253802B8.7.1918 鏈接庫中的鏈接

暫無
暫無

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

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