package org.mongodb.morphia.callbacks; import org.bson.types.ObjectId; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.TestBase; import org.mongodb.morphia.annotations.Id; import org.mongodb.morphia.annotations.PostLoad; import org.mongodb.morphia.annotations.PostPersist; import org.mongodb.morphia.annotations.PreLoad; import org.mongodb.morphia.annotations.PrePersist; public class TestMultipleCallbackMethods extends TestBase { private static int loading; @Test public void testMultipleCallbackAnnotation() throws Exception { final SomeEntity entity = new SomeEntity(); getDs().save(entity); Assert.assertEquals(4, entity.getFoo()); Assert.assertEquals(0, loading); final SomeEntity someEntity = getDs().find(SomeEntity.class).filter("_id", entity.getId()).get(); Assert.assertEquals(4, entity.getFoo()); Assert.assertEquals(-1, someEntity.getFoo()); Assert.assertEquals(2, loading); } abstract static class CallbackAbstractEntity { @Id private final ObjectId id = new ObjectId(); private int foo; public ObjectId getId() { return id; } int getFoo() { return foo; } void setFoo(final int foo) { this.foo = foo; } @PrePersist void prePersist1() { foo++; } @PrePersist void prePersist2() { foo++; } @PostPersist void postPersist1() { foo++; } @PostPersist void postPersist2() { foo++; } @PreLoad void preLoad1() { loading++; } @PreLoad void preLoad2() { loading++; } @PostLoad void postLoad1() { foo--; } @PostLoad void postLoad2() { foo--; } @PostLoad void postLoad3() { foo--; } } static class SomeEntity extends CallbackAbstractEntity { } }