日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

将JPA Hibernate与OptaPlanner集成

發(fā)布時(shí)間:2023/12/3 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将JPA Hibernate与OptaPlanner集成 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們一直在改進(jìn)OptaPlanner與JEE其余部分的集成,因此,構(gòu)建可以正常工作的最終用戶應(yīng)用程序更加容易。 讓我們看一下改進(jìn)的JPA Hibernate集成。

基礎(chǔ)

JPA Hibernate和OptaPlanner都可以在POJO(普通的舊Java對(duì)象)上工作,因此只需在域?qū)ο笊咸砑右恍㎎PA批注以使其與JPA Hibernate保持一致,并添加一些OptaPlanner批注即可解決OptaPlanner的優(yōu)化問題。

在每個(gè)問題事實(shí)類上,通常只有JPA批注:

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

在每個(gè)計(jì)劃實(shí)體類上,都有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實(shí)體(任何持久存儲(chǔ)在數(shù)據(jù)庫(kù)中的對(duì)象)與OptaPlanner規(guī)劃實(shí)體(在解決過程中由OptaPlanner更改的對(duì)象)混淆。

堅(jiān)持得分

默認(rèn)情況下,JPA Hibernate將通過Java序列化將Score放在BLOB列中。 這是不希望的,因?yàn)樗柚沽嗽贘PA-QL查詢中使用分?jǐn)?shù)。 此外,在升級(jí)OptaPlanner版本時(shí),它還會(huì)觸發(fā)數(shù)據(jù)庫(kù)問題。

因此,OptaPlanner 6.4.0.Beta1具有一個(gè)新的jar optaplanner-persistence-jpa ,其中包含每種評(píng)分類型的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;... }

這會(huì)將HardSoftScore放入2個(gè)INTEGER列,而不是BLOB列。 OptaPlanner參考手冊(cè)包含有關(guān)如何正確處理BigDecimal和/或可彎曲分?jǐn)?shù)的更多信息。

克隆陷阱

在JPA模型中,問題事實(shí)通常引用計(jì)劃解決方案,這可能會(huì)破壞計(jì)劃克隆(如果使用默認(rèn)計(jì)劃克隆器)。

為了克服這個(gè)問題,只需使用@DeepPlanningClone注釋注釋引用計(jì)劃解決方案或計(jì)劃實(shí)體的問題事實(shí)類:

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

這樣, Computer類也正在計(jì)劃克隆,并且克隆的cloudBalance字段將指向CloudBalance克隆。

結(jié)論

您可以對(duì)JPA Hibernate和OptaPlanner使用相同的域類,無需重復(fù)您的域!

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

總結(jié)

以上是生活随笔為你收集整理的将JPA Hibernate与OptaPlanner集成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。