【问题标题】:DataNucleus: How do I automatically perform actions when commiting a transaction?DataNucleus:提交事务时如何自动执行操作?
【发布时间】:2009-04-18 17:17:50
【问题描述】:

考虑使用具有以下持久性结构的 DataNucleus 的应用程序:

你有一个类,它有两个属性,如 created(日期)和 lastUpdate(日期):当一个对象出现时,如何自动用适当的值填充这些属性这个类的将被承诺? 适当的值会将 createdlastUpdate 都设置为将对象插入数据库时​​的当前时间,并在 lastUpdate 有改变了。

【问题讨论】:

    标签: java persistence jdo datanucleus


    【解决方案1】:

    我现在自己想通了。

    您需要创建一个InstanceLifecycleListener...

    public class BasicEntityLifecycleListener implements StoreLifecycleListener {
    
        public void postStore(InstanceLifecycleEvent evt) {
        }
    
        public void preStore(InstanceLifecycleEvent evt) {
            if((PersistenceCapable)evt.getSource() instanceof BasicEntity) {
                BasicEntity obj = (BasicEntity)evt.getSource();
                Date now = new Date();
                if(JDOHelper.isNew(obj))
                    obj.setCreated(now);
                obj.setLastUpdate(now);
            }
        }
    }
    

    然后在你的 PersistenceManager 中注册它...

    PersistenceManager pm = pmf.getPersistenceManager();
    pm.addInstanceLifecycleListener(new BasicEntityLifecycleListener(), null);
    

    我在DataNucleus Access Plaftorm manual 中找到了我直到现在才认识的解决方案。在线手册对我来说似乎有点复杂。

    【讨论】:

    • 你知道触发任何 InstanceLifecycleEvent 的方法吗?当我执行 pm.getObjectById(...) 时,我需要执行 LoadLifecycleListener,但是,我假设,根据缓存条件,我不会从数据库中加载对象,因此不会触发侦听器。 . 有没有办法手动完成?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2020-03-13
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2014-04-16
    相关资源
    最近更新 更多