我们一直在改进OptaPlanner与JEE其余部分的集成,因此,构建可以正常工作的最终用户应用程序更加容易。 让我们看一下改进的JPA Hibernate集成。

基础

JPA Hibernate和OptaPlanner都可以在POJO(普通的旧Java对象)上工作,因此只需在域对象上添加一些JPA批注以使其与JPA Hibernate保持一致,并添加一些OptaPlanner批注即可解决OptaPlanner的优化问题。

在每个问题事实类上,通常只有JPA批注:

@Entity // JPA annotation
public class Computer {private int cpuPower;private int memory;private int networkBandwidth;private int cost;...
}

在每个计划实体类上,都有JPA和OptaPlanner批注:

@PlanningEntity // OptaPlanner annotation
@Entity // JPA annotation
public class Process {private int requiredCpuPower;private int requiredMemory;private int requiredNetworkBandwidth;@PlanningVariable(...) // OptaPlanner annotation@ManyToOne() // JPA annotationprivate Computer computer;...
}

不要将JPA实体(任何持久存储在数据库中的对象)与OptaPlanner规划实体(在解决过程中由OptaPlanner更改的对象)混淆。

坚持得分

默认情况下,JPA Hibernate将通过Java序列化将Score放在BLOB列中。 这是不希望的,因为它阻止了在JPA-QL查询中使用分数。 此外,在升级OptaPlanner版本时,它还会触发数据库问题。

因此,OptaPlanner 6.4.0.Beta1具有一个新的jar optaplanner-persistence-jpa ,其中包含每种评分类型的Hibernate类型。 像这样使用它:

@PlanningSolution // OptaPlanner annotation
@Entity // JPA annotation
@TypeDef(defaultForType = HardSoftScore.class, typeClass = HardSoftScoreHibernateType.class) // Hibernate annotation
public class CloudBalance implements Solution<HardSoftScore> {@Columns(columns = {@Column(name = "hardScore"), @Column(name = "softScore")}) // JPA annotationprivate HardSoftScore score;...
}

这会将HardSoftScore放入2个INTEGER列,而不是BLOB列。 OptaPlanner参考手册包含有关如何正确处理BigDecimal和/或可弯曲分数的更多信息。

克隆陷阱

在JPA模型中,问题事实通常引用计划解决方案,这可能会破坏计划克隆(如果使用默认计划克隆器)。

为了克服这个问题,只需使用@DeepPlanningClone注释注释引用计划解决方案或计划实体的问题事实类:

@DeepPlanningClone // OptaPlanner annotation: Force the default planning cloner to planning clone this class too
@Entity // JPA annotation
public class Computer {@ManyToOneprivate CloudBalance cloudBalance;...
}

这样, Computer类也正在计划克隆,并且克隆的cloudBalance字段将指向CloudBalance克隆。

结论

您可以对JPA Hibernate和OptaPlanner使用相同的域类,无需重复您的域!

翻译自: https://www.javacodegeeks.com/2015/09/integrating-jpa-hibernate-with-optaplanner.html

将JPA Hibernate与OptaPlanner集成相关推荐

  1. hibernate与jpa_将JPA Hibernate与OptaPlanner集成

    hibernate与jpa 我们一直在改进OptaPlanner与JEE其余部分的集成,因此更容易构建可以正常工作的最终用户应用程序. 让我们看一下改进的JPA Hibernate集成. 基础 JPA ...

  2. springboot jpa sql打印_SpringBoot集成Spring Data JPA以及读写分离

    相关代码:github OSCchina JPA是什么 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理 ...

  3. Primefaces,Hibernate和SpringRoo集成

    Primefaces,Hibernate和SpringRoo集成 SpringRoo是一个开源软件工具,它使用约定优于配置的概念,以便以驱动的命令行方式生成基于Java的企业软件应用程序.我们已经介绍 ...

  4. jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

    jpa jsf 我们创建了这篇文章,将展示如何使用以下工具创建完整的Web应用程序:Tomcat7,带有Primefaces的JSF2(Facelets和Libraries)(具有AutoComple ...

  5. jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

    jpa jsf 托管豆 这篇文章是本教程第1部分的继续. 在" com.mb"包中,您将需要创建以下类: package com.mb;import org.primefaces. ...

  6. jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

    jpa jsf Primefaces AutoComplete,JSF转换器 这篇文章从第一部分和第二部分继续. JSF拥有Converter工具,可以帮助我们从用户视图中获取一些数据并将其转换为从数 ...

  7. JPA – Hibernate –包级别的类型映射

    当我们最终成熟到可以在JPA中使用某些自定义类型映射时,我们通常会停留在某些提供程序特定的解决方案上,因为JPA本身并未定义任何实现此功能的机制. 让我为您展示一个JPA提供程序Hibernate的自 ...

  8. JPA / Hibernate:基于版本的乐观并发控制

    本文是Hibernate和JPA中基于版本的乐观并发控制的简介. 这个概念已经很老了,上面已经写了很多东西,但是无论如何我都看到了它被重新发明,误解和滥用. 我在编写它只是为了传播知识,并希望引起人们 ...

  9. 完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

    我们创建了这篇文章,将展示如何使用以下工具创建完整的Web应用程序:Tomcat7,带有Primefaces的JSF2(Facelets和Libraries)(具有AutoComplete),JPA ...

最新文章

  1. 加密和解密算法 Asp.net
  2. 网络推广——网络推广专员在面对不同阶段网站优化各有妙计
  3. try catch异常后会执行后面的代码吗_JVM异常处理最强讲解
  4. 物联网实验4 alljoyn物联网实验之手机局域网控制设备
  5. Jackson 读写 JSON
  6. Python代码如何写的更优雅
  7. eclipse注释日期格式修改
  8. python xlrd课程_python中xlrd模块的使用详解
  9. 使用AWS Elastic Beanstalk轻松进行Spring Boot部署
  10. PID控制器开发笔记之三:抗积分饱和PID控制器的实现
  11. MySQL压缩包安装,MySQL8和MySQL5安装,端口3306和3307
  12. 如何用SQL语句查询Excel数据?
  13. [Python Nonebot]QQ机器人相关API / 网址介绍
  14. 【Mysql】根据经纬度远近排序
  15. nRF51822定时器设置
  16. C# 反射 实例化类
  17. uniapp实现多级菜单选择u-select
  18. 项目:招聘网站信息(获取数据+数据分析+数据可视化)
  19. 攻防世界_Crypto_sherlock
  20. Gotomeeting在视频会议行业的应用趋势分析

热门文章

  1. hibernate正向生成数据库表以及配置——Teacher.hbm.xml
  2. JDK,JRE,JVM三者的关系
  3. qt中sendevent_Qt中postEvent和sendEvent函数
  4. python调用webservice接口实例_python调用webservice接口的实现
  5. VMnet1和VMnet8 未识别的网络的解决方法
  6. java记录目录树_Java记录
  7. android wtf_WTF连接池
  8. ibm收购red hat_IBM将收购Red Hat:面向Java的初衷
  9. layui绑定json_认识定制:JSON绑定概述系列
  10. jdk10 换成jdk8_JDK 10的摘要Javadoc标签