我有一個相當有趣的問題。我在服務器上設置了一些值,將bean發送到客戶端,然後返回到服務器,沒有該值。Gwt Requestfactory bean更新問題
這裏是我做的:
1.客戶端通過EntityRequest.getEntity(PARAMS)
2.我從數據庫中通過Hibernate獲取一個bean
3.我設置一些短暫的屬性(我請求從DB一些豆子在客戶端需要它們,並且不希望它們存儲在數據庫中)
4.通過EntityRequest的方法將bean發送給客戶端。
5.客戶端更改其他一些值並調用保持。
6.服務器接收回他的豆和
- 屬性從服務器設定(步驟無3)被擦除/ IGNORED - 是已經適當從客戶端
設置屬性。
它看起來像射頻機制會發送我新鮮的數據庫加載版本只有客戶端的變化。我做了一些研究,看起來肯定有一些bean版本問題。該bean有版本集(見下文),它由Hibernate使用,我也可以通過RF進行猜測。
我應該怎麼做才能讓我的價值回到客戶端?我嘗試了一些「entity.version ++;」在第3步,但它不起作用。
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
@Version
private Integer version;
@Field
private String name;
@Transient
private Long participationId;
...
public Long getId() {
return id;
}
public Integer getVersion() {
return version;
}
...
}
public static Person findPerson(Long id) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
try {
Object p = session.get(Person.class, id);
session.getTransaction().commit();
return p != null ? (Person) p : null;
} catch (RuntimeException e){
logger.error("Person.findPerson", e);
session.getTransaction().rollback();
throw e;
}
}
你能分享你的Locator代碼嗎? (或者'Person'類的'public static Person findPerson(Long id)'方法,取決於你使用的是什麼) –
Thomas,我已經在上面添加了findPerson代碼。我自己也做了一些研究,發現實際上findPerson(id)被調用來重構域對象。爲什麼它不使用內部緩存?我可以用不同的方式編寫findPerson來使用域對象緩存嗎?謝謝。 – hostnik
你**應該**(如:必須,除非你真的知道你在做什麼)在view_ pattern中使用JPA/Hibernate/_open會話,所以共享相同的會話(及其內部緩存)請求(除了性能以外的其他原因)。在請求之間,也許使用另一個共享緩存,但是最好等到你真的需要它([_prepare optimization is all of evil_](http://c2.com/cgi/wiki?PrematureOptimization)) –