下面列出了怎么用javax.persistence.PostUpdate的API类实例代码及写法,或者点击链接到github查看源代码。
@Test
public void testUpdate() throws Exception {
User user = new User();
user.name = "Michael";
user.email = "[email protected]";
warpdb.insert(user);
Thread.sleep(100);
user.name = "Changed";
user.email = "[email protected]";
warpdb.update(user);
assertTrue(user.callbacks.contains(PreUpdate.class));
assertTrue(user.callbacks.contains(PostUpdate.class));
assertNotEquals(user.createdAt, user.updatedAt);
assertEquals(System.currentTimeMillis(), user.updatedAt, 500.0);
// fetch:
User bak = warpdb.fetch(User.class, user.id);
assertNotNull(bak);
assertEquals(user.id, bak.id);
assertEquals("Changed", bak.name);
// email is set updatable=false:
assertEquals("[email protected]", bak.email);
assertEquals(user.createdAt, bak.createdAt);
assertEquals(user.updatedAt, bak.updatedAt);
assertEquals(user.version, bak.version);
}
@Test
public void testUpdateProperties() throws Exception {
User user = new User();
user.name = "Michael";
user.email = "[email protected]";
warpdb.insert(user);
Thread.sleep(100);
user.name = "Changed";
user.version = 99;
warpdb.updateProperties(user, "name", "version", "updatedAt");
assertTrue(user.callbacks.contains(PreUpdate.class));
assertTrue(user.callbacks.contains(PostUpdate.class));
assertNotEquals(user.createdAt, user.updatedAt);
assertEquals(System.currentTimeMillis(), user.updatedAt, 500.0);
// fetch:
User bak = warpdb.fetch(User.class, user.id);
assertNotNull(bak);
assertEquals(user.id, bak.id);
assertEquals("Changed", bak.name);
assertEquals("Changed", bak.name);
assertEquals(99, bak.version);
}
@PostLoad
@PostUpdate
@PostPersist
private void postLoadAttributes() {
if (dbAttributes != null) {
attributes =
dbAttributes.values().stream().collect(toMap(attr -> attr.name, attr -> attr.values));
}
}
@PostLoad
@PostUpdate
public void determineSharedParentStatus() {
Rubric rubric = getRubric();
if (rubric != null && rubric.getMetadata().isShared()) {
getMetadata().setShared(true);
}
}
@PostLoad
@PostUpdate
public void determineLockStatus() {
if (getToolItemAssociations() != null && getToolItemAssociations().size() > 0) {
for(ToolItemRubricAssociation tira : getToolItemAssociations()) {
if(tira.getParameters() == null) {
getMetadata().setLocked(true);
} else if(!tira.getParameters().containsKey(RubricsConstants.RBCS_SOFT_DELETED) || !tira.getParameters().get(RubricsConstants.RBCS_SOFT_DELETED)) {
getMetadata().setLocked(true);
break;
}
}
}
}
@PostLoad
@PostUpdate
public void determineSharedParentStatus() {
Criterion criterion = getCriterion();
if (criterion != null) {
Rubric rubric = criterion.getRubric();
if (rubric != null && rubric.getMetadata().isShared()) {
getMetadata().setShared(true);
}
}
}
@PostUpdate
void situationAfterUpdate(final Situation situation) {
Collection<SituationsMonitor> monis = sitMonRepo.findSituationMonitorsBySituationId(situation.getId());
// this SHOULD inject the managementBus dependency when we use it
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
for (SituationsMonitor moni : monis) {
sendServiceInstanceAdaptionEvent(moni);
}
}
@PostLoad
@PostUpdate
public void determineSharedParentStatus() {
Rubric rubric = getRubric();
if (rubric != null && rubric.getMetadata().isShared()) {
getMetadata().setShared(true);
}
}
@PostLoad
@PostUpdate
public void determineLockStatus() {
if (getToolItemAssociations() != null && getToolItemAssociations().size() > 0) {
for(ToolItemRubricAssociation tira : getToolItemAssociations()) {
if(tira.getParameters() == null) {
getMetadata().setLocked(true);
} else if(!tira.getParameters().containsKey(RubricsConstants.RBCS_SOFT_DELETED) || !tira.getParameters().get(RubricsConstants.RBCS_SOFT_DELETED)) {
getMetadata().setLocked(true);
break;
}
}
}
}
@PostLoad
@PostUpdate
public void determineSharedParentStatus() {
Criterion criterion = getCriterion();
if (criterion != null) {
Rubric rubric = criterion.getRubric();
if (rubric != null && rubric.getMetadata().isShared()) {
getMetadata().setShared(true);
}
}
}
@PostPersist @PostUpdate @PostLoad
protected void decryptData() {
// Decrypt the endpoint properties.
EntityType entityType = EntityType.Api;
if (type == PolicyType.Client) {
entityType = EntityType.ClientApp;
} else if (type == PolicyType.Plan) {
entityType = EntityType.Plan;
}
DataEncryptionContext ctx = new DataEncryptionContext(organizationId, entityId, entityVersion, entityType);
configuration = CurrentDataEncrypter.instance.decrypt(configuration, ctx);
}
@PostUpdate
void postUpdate() {
postUpdated = true;
}
@PostUpdate
void postUpdate() {
postUpdated = true;
}
@PostUpdate
void postUpdate() {
postUpdated = true;
}
@PostUpdate
void postUpdate() {
postUpdated = true;
}
@PostUpdate
void postUpdate() {
postUpdated = true;
}
@PostUpdate
public void onUpdate(ToDo todo) {
AutowireHelper.autowire(this, this.publisher);
this.publisher.publish(new TodoUpdatedEvent(todo));
}
/**
* Method to decrypt password after user loading.
*
* @param obj the {@link User} whose password should be decrypted
*/
@PostLoad
@PostUpdate
public void decrypt(Object obj) throws IllegalAccessException {
EncrypterUtil.decrypt(obj);
}
public Mapper(Class<T> clazz) {
super();
List<AccessibleProperty> all = getPropertiesIncludeHierarchy(clazz);
// check duplicate name:
Set<String> propertyNamesSet = new HashSet<>();
for (String propertyName : all.stream().map((p) -> {
return p.propertyName;
}).toArray(String[]::new)) {
if (!propertyNamesSet.add(propertyName.toLowerCase())) {
throw new ConfigurationException(
"Duplicate property name found: " + propertyName + " in class: " + clazz.getName());
}
}
Set<String> columnNamesSet = new HashSet<>();
for (String columnName : all.stream().map((p) -> {
return p.columnName;
}).toArray(String[]::new)) {
if (!columnNamesSet.add(columnName.toLowerCase())) {
throw new ConfigurationException("Duplicate column name found: " + columnName);
}
}
// check @Id:
AccessibleProperty[] ids = all.stream().filter((p) -> {
return p.isId();
}).sorted((p1, p2) -> {
return p1.columnName.compareTo(p2.columnName);
}).toArray(AccessibleProperty[]::new);
if (ids.length == 0) {
throw new ConfigurationException("No @Id found.");
}
if (ids.length > 1 && all.stream().filter((p) -> {
return p.isId() && p.isIdentityId();
}).count() > 0) {
throw new ConfigurationException("Mutiple @Id cannot be identity.");
}
// get @Version:
AccessibleProperty[] versions = all.stream().filter((p) -> {
return p.isVersion();
}).toArray(AccessibleProperty[]::new);
if (versions.length > 1) {
throw new ConfigurationException("Multiple @Version found.");
}
this.version = versions.length == 0 ? null : versions[0];
this.allProperties = all;
this.allPropertiesMap = buildPropertiesMap(this.allProperties);
this.insertableProperties = all.stream().filter((p) -> {
if (p.isIdentityId()) {
return false;
}
return p.isInsertable();
}).collect(Collectors.toList());
this.updatableProperties = all.stream().filter((p) -> {
return p.isUpdatable();
}).collect(Collectors.toList());
this.updatablePropertiesMap = buildPropertiesMap(this.updatableProperties);
// init:
this.ids = ids;
this.entityClass = clazz;
this.tableName = getTableName(clazz);
this.whereIdsEquals = String.join(" AND ",
Arrays.stream(this.ids).map(id -> id.columnName + " = ?").toArray(String[]::new));
this.selectSQL = "SELECT * FROM " + this.tableName + " WHERE " + this.whereIdsEquals;
String insertPostfix = this.tableName + " (" + String.join(", ", this.insertableProperties.stream().map((p) -> {
return p.columnName;
}).toArray(String[]::new)) + ") VALUES (" + numOfQuestions(this.insertableProperties.size()) + ")";
this.insertSQL = "INSERT INTO " + insertPostfix;
this.insertIgnoreSQL = "INSERT IGNORE INTO " + insertPostfix;
this.updateSQL = "UPDATE " + this.tableName + " SET "
+ String.join(", ", this.updatableProperties.stream().map((p) -> {
return p.columnName + " = ?";
}).toArray(String[]::new)) + " WHERE " + this.whereIdsEquals;
this.deleteSQL = "DELETE FROM " + this.tableName + " WHERE " + this.whereIdsEquals;
this.rowMapper = new BeanRowMapper<>(this.entityClass, this.allProperties);
List<Method> methods = this.findMethods(clazz);
this.prePersist = findListener(methods, PrePersist.class);
this.preUpdate = findListener(methods, PreUpdate.class);
this.preRemove = findListener(methods, PreRemove.class);
this.postLoad = findListener(methods, PostLoad.class);
this.postPersist = findListener(methods, PostPersist.class);
this.postUpdate = findListener(methods, PostUpdate.class);
this.postRemove = findListener(methods, PostRemove.class);
}
@PostUpdate
void postUpdate(Object entity) {
EntityCallbackExecutor.create(PostUpdate.class).execute(entity, entity.getClass());
}
@PostUpdate
void entityEmbeddedNestedPostUpdate() {
entityEmbeddedNestedPostUpdate++;
}
@PostUpdate
public void onUpdate() {
PersistenceListenerManager.getInstance().fireUpdated(this);
}
@PostPersist
@PostUpdate
public void readAfterSave(final JPAJSONAnyObject anyObject) {
super.json2list(anyObject, true);
}
@PostPersist
@PostUpdate
public void readAfterSave(final JPAJSONGroup group) {
super.json2list(group, true);
}
@PostPersist
@PostUpdate
public void readAfterSave(final JPAJSONUser user) {
super.json2list(user, true);
}
@PostPersist
@PostUpdate
public void readAfterSave(final JPAJSONLinkedAccount account) {
super.json2list(account, true);
}
/**
* 更新后回调
*/
@PostUpdate
protected void onPostUpdate() {
Logger.info("user '%s' update data '%s - %s'.", getUpdater(), this.getClass().getSimpleName(), getId());
}
@PostPersist
@PostUpdate
@PostRemove
private void afterAnyUpdate(User user) {
log.info("[USER AUDIT] add/update/delete complete for user: " + user.getId());
}