[英]How configure Achiles work with entity methods properly?
我使用Achilles庫處理cassandra數據庫。 問題是當我創建影響字段阿喀琉斯的實體方法時,“看不到”這些更改。 請參見下面的示例。
import info.archinnov.achilles.persistence.PersistenceManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class AhilesTest {
private static final UUID ID = UUID.fromString("083099f6-e423-498d-b810-d6c564228724");
//This is achilles persistence manager
@Autowired
private PersistenceManager persistenceManager;
public void test () {
//user creation and persistence
User toInsert = new User();
toInsert.setId(ID);
toInsert.setName("name");
toInsert.setVersion(0l);
persistenceManager.insert(toInsert);
//find user
User user = persistenceManager.find(User.class, id);
user.changeName("newName");
persistenceManager.update(user);
User updatedUser = persistenceManager.find(User.class, id);
//here old "name" value is returned
updatedUser.getName();
}
public class User {
private UUID id;
private String name;
private long version;
public void changeName (String newName) {
this.name = newName;
this.version++;
}
//getters and setters are omited
}
}
user.changeName("newName");
不會影響實體,並且“舊”值會保留。 就我的觀點(我已經看到了調試調用堆棧),發生這種情況是因為實際的用戶實體是使用Achilles代理包裝的,該代理對gettter / setter調用做出反應。 同樣,當我替換changeName
:調用直接進行getter / setter調用user.setName("newName"); user.setVersion(user.getVersion()+1);
user.setName("newName"); user.setVersion(user.getVersion()+1);
更新成為工作。
那么為什么會發生這種情況,並且有一種方法可以配置Achilles以響應非getter / setter方法調用?
在對user
執行任何操作之前,您應該從info.archinnov.achilles.persistence.PersistenceManager
獲取用戶代理,並且僅在此之后才使用setter / getter對“ user”實體進行修改。
User user = persistenceManager.getProxy(User.class, UUID.fromString(id));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.