使用 JPA 2 配置持久性和 orm

2023-11-23

我在 jBPM 项目中使用 Persistence 时遇到一些问题。

我的配置是 jBPM 5.4 + Hibernate + JPA 2,我目前正在设置流程以通过 persistence.xml 连接到具有持久性的数据库。我只是尝试将默认数据源(在 H2 服务器中)与我的自定义 persistence.xml 连接,但我不断地收到相同的错误:

Unknown entity: org.jbpm.persistence.processinstance.ProcessInstanceInfo

我已手动将以下内容添加到 src/META-INF 文件夹中的 JBPMorm-JPA2.xml 中,但错误仍然存​​在。谁能帮我?

JBPMorm-JPA2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
                 version="2.0">
      <named-query name="ProcessInstancesWaitingForEvent">
          <query>
select 
    processInstanceInfo.processInstanceId
from 
    ProcessInstanceInfo processInstanceInfo join processInstanceInfo.eventTypes eventTypes
where
    eventTypes = :type
          </query>
      </named-query>

      <!-- ProcessInstanceInfo mapping (needed for JPA 2) -->

      <entity class="org.jbpm.persistence.processinstance.ProcessInstanceInfo"
              metadata-complete="true">
        <pre-update method-name="update" />
        <attributes>
            <id name="processInstanceId">
                <column name="InstanceId" />
                <generated-value strategy="AUTO"/>
            </id>
            <basic name="processId" access="FIELD" />
            <basic name="startDate" access="FIELD" >
                <temporal>DATE</temporal>
            </basic>
            <basic name="lastReadDate" access="FIELD" >
                <temporal>DATE</temporal>
            </basic>
            <basic name="lastModificationDate" access="FIELD" >
                <temporal>DATE</temporal>
            </basic>
            <basic name="state" access="FIELD" />
            <basic name="processInstanceByteArray" access="FIELD" >
                <lob/>
            </basic>
            <version name="version" access="FIELD" >
                <column name="OPTLOCK" />
            </version>
            <element-collection name="eventTypes" target-class="java.lang.String" access="FIELD" >
                <collection-table name="EventTypes">
                    <join-column name="InstanceId"/>
                </collection-table> 
            </element-collection>
            <transient name="processInstance" />
            <transient name="env" />
        </attributes>
      </entity>

</entity-mappings>

持久性.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence
  version="1.0"
  xsi:schemaLocation=
    "http://java.sun.com/xml/ns/persistence
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
     http://java.sun.com/xml/ns/persistence/orm
     http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
  xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/persistence">

  <persistence-unit name="IALPR" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/jbpm-ds</jta-data-source>
    <class>org.drools.persistence.info.SessionInfo</class>
    <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
    <class>org.drools.persistence.info.WorkItemInfo</class>

    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.transaction.manager_lookup_class"
                value="org.hibernate.transaction.BTMTransactionManagerLookup"/>

    </properties>

  </persistence-unit>

</persistence>

UPDATE:

要解决此问题,请在 META-INF 文件夹中创建 ProcessInstanceInfo.hbm.xml,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="org.jbpm.persistence.processinstance">

    <!-- access="field" for fields that have no setter methods -->
    <class name="ProcessInstanceInfo" table="ProcessInstanceInfo">

        <id name="processInstanceId" type="long" column="InstanceId">
            <generator class="native" />
        </id>

        <version name="version" type="integer" unsaved-value="null" access="field">
          <column name="OPTLOCK" not-null="false" />
        </version>

        <property name="processId" access="field" />
        <property name="startDate" type="timestamp" access="field" />
        <property name="lastReadDate" type="timestamp"  access="field" />
        <property name="lastModificationDate" type="timestamp" access="field" />
        <property name="state" type="integer" not-null="true" access="field" />

       <property name="processInstanceByteArray" type="org.hibernate.type.PrimitiveByteArrayBlobType" 
            column="processInstanceByteArray" access="field" length="2147483647" />

        <set name="eventTypes" table="EventTypes" access="field" >
            <key column="InstanceId"/>
            <element column="element" type="string"/>
        </set>

        <!-- NOT mapping [processInstance] field because field is transient -->    
        <!-- NOT mapping [env] field because field is transient -->    

    </class>

</hibernate-mapping>

如果有人知道有关配置 jBPM5 持久性的好教程,请分享...这太疯狂了!


好的,这里有一个使用 MySQL 数据库和 JBoss AS 在 JBPM 中配置持久性的小教程:

1)在src/main/java文件夹下创建一个META-INF文件夹

2)创建persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
             xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" 
             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_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">

    <persistence-unit name="your_unit_name" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/your_data_source_name</jta-data-source>        
        <mapping-file>META-INF/JBPMorm.xml</mapping-file>
        <mapping-file>META-INF/ProcessInstanceInfo.hbm.xml</mapping-file>

        <!-- The tables that will be created in your specified sql schema -->
        <class>org.drools.persistence.info.SessionInfo</class>
        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
        <class>org.drools.persistence.info.WorkItemInfo</class>

        <properties>

      <property name="hibernate.default_schema" value="your_schema_name" />  

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.connection.autocommit" value="false" />
            <property name="hibernate.max_fetch_depth" value="3"/>
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />

        </properties>        
    </persistence-unit>





</persistence> 

3)创建orm.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
    version="1.0">
    <named-query name="ProcessInstancesWaitingForEvent">
        <query>
            select
            processInstanceInfo.processInstanceId
            from
            ProcessInstanceInfo processInstanceInfo
            where
            :type in elements(processInstanceInfo.eventTypes)
          </query>
    </named-query>

</entity-mappings>

4)创建ProcessInstanceInfo.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.jbpm.persistence.processinstance">

    <!-- access="field" for fields that have no setter methods -->
    <class name="ProcessInstanceInfo" table="ProcessInstanceInfo">

        <id name="processInstanceId" type="long" column="InstanceId">
            <generator class="native" />
        </id>

        <version name="version" type="integer" unsaved-value="null" access="field">
          <column name="OPTLOCK" not-null="false" />
        </version>

        <property name="processId" access="field" />
        <property name="startDate" type="timestamp" access="field" />
        <property name="lastReadDate" type="timestamp"  access="field" />
        <property name="lastModificationDate" type="timestamp" access="field" />
        <property name="state" type="integer" not-null="true" access="field" />

       <property name="processInstanceByteArray" type="org.hibernate.type.PrimitiveByteArrayBlobType" 
            column="processInstanceByteArray" access="field" length="2147483647" />

        <set name="eventTypes" table="EventTypes" access="field" >
            <key column="InstanceId"/>
            <element column="element" type="string"/>
        </set>

        <!-- NOT mapping [processInstance] field because field is transient -->    
        <!-- NOT mapping [env] field because field is transient -->    

    </class>

</hibernate-mapping>

5)现在您必须定义您的数据源。我使用 JBoss5,这个版本的 JBoss 将读取任何具有 *-ds.xml 模式的文件作为数据源的定义。您必须将此文件放入部署文件夹中(您可能会注意到那里已经有一个数据源文件,但不会有冲突)。如果您使用 JBoss7,有一种不同的方法来定义 DS - 我想这可能会有所帮助https://community.jboss.org/wiki/DataSourceConfigurationInAS7.

不管怎样,你的 yourDS-ds.xml 应该是这样的:

<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/your_datasource_name</jndi-name>
    <connection-url>your_db_url</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>your_user</user-name>
    <password>your_pass</password>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <idle-timeout-minutes>5</idle-timeout-minutes>
  </local-tx-datasource>
</datasources>

6) 上述说明至少足以在数据库中创建持久性表。当您最终开始在 JBPM 中使用任务时,可能需要创建一个 Taskorm.xml 文件(google 一下,它太长了)。我不确定是否有必要,但无论如何我都有。

7) 最后,只需通过 EntityManagerFactory 调用 Java 中的持久性单元,创建环境并启动新会话。持久化数据应该自动保存到DB中。

希望这有帮助。干杯!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JPA 2 配置持久性和 orm 的相关文章

随机推荐

  • 如何根据一组图像编写电影创作脚本?

    我设法使用 Python 加载了一组图像 我希望我的脚本能够拍摄这一系列图像 以我需要的任何格式 并根据它们创建视频 所有这一切的最大限制是我正在寻找易于安装的东西 理想情况下 使用标准 OS X 安装过程 下载 dmg click 移至应
  • 在spark中,如何快速估计数据框中的元素数量

    在spark中 有没有一种快速的方法来获取数据集中元素数量的近似计数 也就是说 比Dataset count does 也许我们可以根据数据集的分区数量来计算这些信息 可以吗 你可以尝试使用countApprox在 RDD API 上 尽管
  • 如何重写此 Flask 视图函数以遵循 post/redirect/get 模式?

    我有一个小型日志浏览器 它根据用户的输入检索并显示以前记录的记录列表 它不更新任何内容 代码非常简单并且运行良好 这是一个简化版本 app route log methods GET POST def log form LogForm if
  • 如何在 Docker 构建期间运行需要 tty 的命令?

    我有一些需要在 Docker 构建期间运行的脚本 该脚本需要 tty Docker 在构建期间不提供 在幕后该脚本使用read命令 Witha tty 我可以做类似的事情 echo yes echo no myscript sh 没有它 我
  • 地图/方向卡和集成操作/意图,例如呼叫、电子邮件 - 使用 Dialogflow、Actions on Google、NodeJS 客户端 V2

    我一直在试图弄清楚如何使用构建地图 方向卡对话流和NodeJS 客户端 经过一些研究后 我发现了这个SO解释了如何使用生成静态地图 URL 作为图像 谷歌路线 API和折线 但在我看来 Dialogflow 中应该有一个功能 允许开发人员构
  • 将方法设为虚拟有什么危险?

    我一直在使用 RhinoMocks 进行一些模拟 它要求将模拟方法设为虚拟 这很好 除了我们有一个自定义框架 其中包含我想要模拟的方法 这些方法当前未标记为虚拟 我无法预见使这些方法虚拟化会出现任何问题 但我想知道使方法虚拟化有哪些我应该注
  • 如何在 CSS 中创建脉冲发光环动画?

    我喜欢这样的方式website让他们的戒指发光并发出脉冲 我想知道他们是如何做到的 我可以做类似的东西 但我不是很好 这就是我所能弄清楚的 但它似乎不起作用 CSS glowycircleouter blue glow4 box shado
  • 切换到浏览器中其他打开的选项卡时更改标题标签的内容

    我最近在两个不同的网站上看到了这个 有人知道它是如何完成的吗 如果您打开了多个选项卡 并且保留了当前选项卡 则选项卡中的标题会发生更改 非常好的技巧 http blog invisionapp com http zerosixthird s
  • 使用 jQuery datepicker 进行自定义日期格式验证(无法摆脱美国日期验证)

    我快到了 我创建了本地化的 jQuery 日期选择器 添加了自定义格式验证 但无法摆脱 默认 美国日期格式验证 我正在像这样渲染我的日期字段 Html EditorFor m gt m JobDate Html ValidationMess
  • Rails - 嵌套包含在活动记录上?

    我有一个我获取的事件列表 我试图包含与此事件关联的每个用户以及与每个用户关联的每个配置文件 用户被包含在内 但他们的个人资料未被包含在内 我该怎么做 Event includes users profile 文档似乎不清楚 http gui
  • Laravel 5 如何包含 autoload.php

    我试图包含 autoload php 的路径 该路径位于 vendor autoload php 尝试访问它的文件位于 public this file php 我将路径设置为require once vendor autoload php
  • Resteasy Bean 验证未被调用

    问题背景 我有一个通过 Resteasy 使用 Spring 的 Resteasy 服务SpringContextLoaderListener 这是基于 Resteasy 版本构建的3 0 beta 6 我想对传入请求使用 bean 验证
  • Azure DevOps 本地成本

    这么问似乎很奇怪 但这就是微软希望我们做的事情 所以这里 我正在考虑设置本地 Azure DevOps 2019 服务器 但与往常一样 许可和成本不是很透明 我们的开发团队可能会获得 Visual Studio Pro 订阅 我相信它附带
  • 每 5 秒连续调用一次 Javascript 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 每 60 秒调用一次函数 我想每 5 秒连续调用一次 Javascript 函数 我见过 setTimeOut 事件 如果我想要连续使用它会正常工作吗 您可以使用setInterval 参数是相同的
  • 如何用某种颜色突出显示树视图所选项目?

    我在 WPF 中有一个树视图 当我选择树视图项目时 我想要不同的颜色 简单触发TreeView ItemContainerStyle对于默认的 TreeView 模板没有帮助 对于标准模板突出显示是通过特定的背景更改来完成的TreeView
  • jQuery 可以解析存储在变量中的 HTML 吗?

    我使用 PHP 和 ajax 命令来获取外部网页的整个 HTML 内容 通过 PHPfile get contents 命令 并将该 HTML 传递到 JavaScript 变量中 一旦我将页面的 HTML 内容存储在变量中 我是否可以使用
  • 计算旋转矩形中最大的内接矩形

    我试图找到计算可包含在旋转矩形内的最大 面积 矩形的最佳方法 有些图片应该有助于 我希望 理解我的意思 输入矩形的宽度和高度是给定的 旋转角度也是给定的 输出矩形未旋转或倾斜 我正在走一条冗长的路线 我什至不确定它是否能处理极端情况 没有双
  • 模仿 Photoshop 混合效果,如乘法、叠加等

    我正在制作一个带有整页背景图像的网站 我想为侧栏创建一个背景图像 其作用类似于具有乘法作为混合模式的 Photoshop 图层 它只是一个具有 Photoshop 多层 行为 的蓝色表面 无法合并叠加层和图像 因为以其他屏幕比例 尺寸打开网
  • d3js 创建具有固定节点的力布局[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我已经实现了这个http jsbin com omokap 3 edit 但是 我想取消图形的动态行为 例如在拖尾状态下 但这仅适用于单个节点 并将节点放置在从 json 获取的设置点
  • 使用 JPA 2 配置持久性和 orm

    我在 jBPM 项目中使用 Persistence 时遇到一些问题 我的配置是 jBPM 5 4 Hibernate JPA 2 我目前正在设置流程以通过 persistence xml 连接到具有持久性的数据库 我只是尝试将默认数据源 在