首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并现有对象不会更新数据库中嵌入的已更改的@

合并现有对象不会更新数据库中嵌入的已更改的@
EN

Stack Overflow用户
提问于 2016-02-09 14:28:13
回答 1查看 1.1K关注 0票数 1

为了实现OSGI兼容性,我使用Eclipselink的Amdatu实现。

有人能发现为什么这不起作用吗?

下面的类被定义为一个实体,应该持久化。每次对Ptz2PlPalletUnloadOrder,进行更新时,OrderRepoImpl中的保存方法都会将持久化顺序与更新后的版本合并,其中已更改了Ptz2PlPalletUnloadDefinition def或 orderState orderState。

无论如何,我可以使用orderState方法更新数据库中的em.merge,但不能更新BD中的@Embedded def对象。在数据库中不生成新行的情况下进行更新是非常可取的。

当合并对象时,不抛出异常,log4j将包含在问题的底部。

Ptz2PlPalletUnloadOrder

代码语言:javascript
复制
@Entity(name = Ptz2PlPalletUnloadOrder.TABLE_NAME)
@Table(name = Ptz2PlPalletUnloadOrder.TABLE_NAME)
public class Ptz2PlPalletUnloadOrder implements Order {
    public static final String TYPE = "ptz2pl.pallet.unload";
    public static final String TABLE_NAME = "order_ptz2pl_pallet_unload";

    // Order ID
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long dbId;

    @Temporal(TemporalType.TIMESTAMP)
    private Date created = new Date();

    // States
    @Enumerated(EnumType.STRING)
    private OrderState orderState = OrderState.NEW;

    @Embedded
    private Ptz2PlPalletUnloadDefinition def;
}

Ptz2PlPalletUnloadDefinition

持久化类。

代码语言:javascript
复制
@Embeddable
public class Ptz2PlPalletUnloadDefinition {

    @Embedded
    private Station station;
    private volatile Integer agvId;
    private volatile String agvSystemName;
    @Temporal(TemporalType.TIMESTAMP)
    private Date deadLine;
    private String userId;
    private Long palletType;

    private Ptz2PlPalletUnloadDefinition() {

    }
}

OrderRepoImpl

代码语言:javascript
复制
@Transactional
@Component(provide = ManagedTransactional.class)
public class OrderRepoImpl implements OrderRepo, ManagedTransactional {

    private EntityManager em;

    @Override
    public Ptz2PlPalletUnloadOrder save(Ptz2PlPalletUnloadOrder order) {
        Ptz2PlPalletUnloadOrder result = em.merge(order);
        return result;
    }
}

当制动通过该方法时,结果值具有正确的值。因此,人们会期望数据库已经更新,但是当Ptz2PlPalletUnloadOrder的要更新字段是一个嵌入式对象时,就不会发生这种不幸的情况。

日志

代码语言:javascript
复制
[EL Finer]: 2016-02-09 15:25:32.393--ServerSession(1465675217)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--client acquired: 2038620953
[EL Finer]: 2016-02-09 15:25:32.393--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--TX binding to tx mgr, status=STATUS_ACTIVE
[EL Finer]: 2016-02-09 15:25:32.394--ClientSession(2038620953)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--acquire unit of work: 769186
[EL Finest]: 2016-02-09 15:25:32.395--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--Merge clone with references Ptz2PlPalletUnloadOrder [id=1, orderState=QUEUED, location=Location [stationId=10, systemName=BEING], allocatedAgvId=null, allocatedAgvSystemName=null]
[EL Finer]: 2016-02-09 15:25:37.014--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--TX beforeCompletion callback, status=STATUS_ACTIVE
[EL Finer]: 2016-02-09 15:25:37.015--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--begin unit of work commit
[EL Finer]: 2016-02-09 15:25:37.016--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--TX afterCompletion callback, status=COMMITTED
[EL Finer]: 2016-02-09 15:25:37.017--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--end unit of work commit
[EL Finer]: 2016-02-09 15:25:37.018--UnitOfWork(769186)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--release unit of work
[EL Finer]: 2016-02-09 15:25:37.019--ClientSession(2038620953)--Thread(Thread[pool-7-thread-4,5,Configuration Admin Service])--client released
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 13:57:10

我在一个amdatu-jpa的测试案例中复制了这个。

在EclipseLink论坛https://www.eclipse.org/forums/index.php/t/474144/上发现了一个类似的问题

禁用编织解决了我创建的测试中的问题。禁用将下面的属性添加到persistence.xml

代码语言:javascript
复制
<property name="eclipselink.weaving" value="false"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35294552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档