【发布时间】:2021-04-26 13:43:23
【问题描述】:
目前,我正在尝试将eclipse-ee4j/cargotracker(最初是 Eric 的 DDD 书籍样本的重写版本)更新到最新的 Jakarta EE 8:
https://github.com/hantsy/cargotracker/tree/jakartaee8
就个人而言,我想扩展 WildFly 作为替代应用程序服务器。但是我在 Payara/ElipseLInks 和 WildFly/Hibernate 之间遇到了几个有线问题。
有一个 Cargo 实体具有 RouteSepcificaiton 可嵌入属性,该属性具有出发和到达 Location(实体)和到达截止日期。
关系的虚拟代码片段:
@Entity class Cargo{
@Embedded routeSepcification;
}
@Embedable class RouteSpecificition{
@ManyToOne Location origin
@ManyToOne Location destination
}
@Entity class Location{}
书新货很好用,但是当我想用cargo.specifyNewRoute换成新航线,也就是更新航线规范时,并没有按预期更新。
完整的测试代码是here。
startTransaction();
var trackingId = new TrackingId("AAA");
Cargo cargo = cargoRepository.find(trackingId);
assertThat(cargo).isNotNull();
Location origin = locationRepository.find(SampleLocations.NEWYORK.getUnLocode());
Location destination = locationRepository.find(SampleLocations.HELSINKI.getUnLocode());
cargo.specifyNewRoute(new RouteSpecification(origin, destination, LocalDate.now()));
cargoRepository.store(cargo);
commitTransaction();
//verify in the new tx
startTransaction();
var result = this.entityManager.createQuery("select c from Cargo c where c.trackingId=:trackingId", Cargo.class)
.setParameter("trackingId", trackingId)
.getSingleResult();
assertThat(result.getTrackingId()).isEqualTo(trackingId);
assertThat(result.getRouteSpecification().getOrigin()).isEqualTo(origin);
assertThat(result.getRouteSpecification().getDestination()).isEqualTo(destination);
assertThat(result.getItinerary().getLegs()).hasSize(1);
commitTransaction();
Arquillian 测试在 WildFly/Hibernate 上失败,但在 Payara/EclipseLinks 上通过。
【问题讨论】: