【发布时间】:2016-04-16 09:23:57
【问题描述】:
由于 EclipseLink 中的更改跟踪,我们目前的应用程序遇到了严重的减速。问题是自制的,我们没有按预期使用 JPA。
我想知道如何获得缓存命中(第一级),但除非满足某些条件,否则不要将这些实体包括在更改跟踪中。
// not real code, but close if you decompose the layers and inline methods
public void foo(Long customerId, boolean changeName, String newName) {
/*** check customer valid ***/
// #1 HOW TO discard from change tracking? – Customer won’t get modified!
Customer customer = entityManager.find(Customer.class, customerId);
// some Business Rules
// #2 They should be auto discarded from change tracking because #1 is also discarded)
checkSomething(customer.getAddresses());
checkSomething(customer.getPhoneNumbers ());
…
/*** manipulate customer ***/
// somewhere else in different classes/methods …
if(changeName) {
// #3 HOW TO get Cache hit (1st level) - it was read in #1
// newName should be persisted
customer = entityManager.find(Customer.class, customerId);
customer.setName(newName);
}
}
#1 和#2 可以使用 EclipseLink API
我更喜欢提示。
EclipseLink 2.4.2
二级缓存:禁用
ChangeTrackingType: DEFERRED
【问题讨论】:
标签: jpa caching eclipselink change-tracking