2012-07-19 60 views
0

我有与@PostPersist注释的方法的模型:如何在morphia中保存模型时忽略`@ PostPersist`?

@Entity 
class User extends Model { 
    private String name; 
    // getter and setter 
    @PostPersist 
    public void _postPersist() { 
     // do something 
    } 
} 

现在,当我保存用户的_postPersist()方法将被自动调用。

但现在我必须保存用户,并暂时忽略_postPersist()方法,有没有办法做到这一点?

回答

0

什么

@Entity 
class User extends Model { 
    private String name; 
    private transient boolean ignorePostPersist = false; 
    public User ignorePostPersist() {ignorePostPersist = true; return this;} 
    public void ignorePostPersist(boolean b) {ignorePostPersist = b; return this;} 
    // getter and setter 
    @PostPersist 
    public void _postPersist() { 
     if (ignorePostPersist) return; 
     // do something 
    } 
    public void saveWithoutPostPersist() { 
     ignorePostPersist = true; 
     try { 
      save(); 
     } finally { 
      ignorePostPersist = false; 
     } 
    } 
} 
... 
User user = ... 
user.saveWithoutPostPersist(); 
+0

感谢绿色,但如果有很多机型,而且他们也有'@ PrePersist','@ PreDelete','@ PostDelete',该解决方案将是如此复杂。 – Freewind 2012-07-20 02:19:07

+0

如果你不需要这些钩子,你为什么要定义它们? – 2012-07-21 13:00:03

+0

有时候我需要它们。但在数据修复时间中,我希望手动修复所有数据,这些触发器会导致一些不可控的情况。 – Freewind 2012-07-21 14:15:44