hibernate与jpa_将JPA Hibernate与OptaPlanner集成
hibernate與jpa
我們一直在改進OptaPlanner與JEE其余部分的集成,因此更容易構(gòu)建可以正常工作的最終用戶應用程序。 讓我們看一下改進的JPA Hibernate集成。
基礎
JPA Hibernate和OptaPlanner都可以在POJO(普通的舊Java對象)上工作,因此只需在域?qū)ο笊咸砑右恍㎎PA批注以使其與JPA Hibernate保持一致,并添加一些OptaPlanner批注即可解決OptaPlanner的優(yōu)化問題。
在每個問題事實類上,通常只有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實體(任何持久存儲在數(shù)據(jù)庫中的對象)與OptaPlanner規(guī)劃實體(在解決過程中被OptaPlanner更改的對象)混淆。
堅持得分
默認情況下,JPA Hibernate將通過Java序列化將Score放在BLOB列中。 這是不希望的,因為它阻止了在JPA-QL查詢中使用分數(shù)。 此外,它在升級OptaPlanner版本時觸發(fā)數(shù)據(jù)庫問題。
因此,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參考手冊包含有關(guān)如何正確處理BigDecimal和/或可彎曲分數(shù)的更多信息。
克隆陷阱
在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克隆。
結(jié)論
您可以對JPA Hibernate和OptaPlanner使用相同的域類,無需重復您的域!
翻譯自: https://www.javacodegeeks.com/2015/09/integrating-jpa-hibernate-with-optaplanner.html
hibernate與jpa
總結(jié)
以上是生活随笔為你收集整理的hibernate与jpa_将JPA Hibernate与OptaPlanner集成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为mate20pro和mate30怎么
- 下一篇: 枚举对象注释_如何以及何时使用枚举和注释