JBoss ejb事务不从JPA Java持久性对象(Eclipselink)生成Oracle SQL语句

pxyaymoc  于 2022-10-04  发布在  Java
关注(0)|答案(1)|浏览(114)

我正在尝试使用TopLink将一个重型应用程序(Jnlp)从Oracle OC4j(OAS)迁移到使用Nikpselink的RH JBoss(不更改Bean的功能代码)。

如果在SELECT SQL语句中正确转换了只读Java指令:

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中是否有任何设置或参数用于在EJB提交其事务时激活该“转换”?

我想指定我正在将“本机”Oracle JDBC连接协议与会话s.xml和一个XMLMap文件(Oracle数据库表/列和Java类/属性对象之间的对应关系)一起使用,而不是持久性单元(与sistence.xml定义文件和实体管理器一起使用)。

非常感谢您的帮助和建议。

问候

  • 当前配置:使用TopLink 11.1.1.2.0 JPA实施的Oracle OC4j 10.1.3.5.0*

  • 目标配置:RedHat JBoss EAP 7.4,使用Nikpselink 2.7.0 JPA实现**

5vf7fwbs

5vf7fwbs1#

我只想快速地与社区分享一种解决我的问题的方法:在TopLink->eclipselink迁移过程中,一些连接设置从Java<->Oracle XMLMap文件(XXX.xml)和essions.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>

我必须在essions.xml文件中添加/移动以下标记:

<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语句。

对于信息,essions.xml的XSD词典是:/org/eclipse/persistence/eclipselink_sessions_2.1.xsd in eclipselink-2.7.11库

相关问题