mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
* removed unused imports (no code change) * Add missing @Override / @SupressWarnings (no code change) * FIX: serialization warnings * FIX: Access to static member
62 lines
1.7 KiB
Java
62 lines
1.7 KiB
Java
package io.ebeaninternal.server.persist;
|
|
|
|
import io.ebean.bean.EntityBean;
|
|
import io.ebeaninternal.server.deploy.BeanPropertyAssocOne;
|
|
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Node for processing merge on ToOne properties.
|
|
*/
|
|
class MergeNodeAssocOne extends MergeNode {
|
|
|
|
private final BeanPropertyAssocOne<?> one;
|
|
|
|
MergeNodeAssocOne(String fullPath, BeanPropertyAssocOne<?> property) {
|
|
super(fullPath, property);
|
|
this.one = property;
|
|
}
|
|
|
|
@Override
|
|
public void merge(MergeRequest request) {
|
|
|
|
EntityBean entityBean = getEntityBean(request.getBean());
|
|
if (entityBean == null) {
|
|
checkOrphanRemoval(request);
|
|
|
|
} else {
|
|
Object beanId = targetDescriptor.getId(entityBean);
|
|
if (beanId == null) {
|
|
checkOrphanRemoval(request);
|
|
|
|
} else {
|
|
EntityBean outlineBean = getEntityBean(request.getOutline());
|
|
Object outlineId = (outlineBean == null) ? null : targetDescriptor.getId(outlineBean);
|
|
if (isUpdate(beanId, outlineId, request)) {
|
|
entityBean._ebean_getIntercept().setForceUpdate(true);
|
|
cascade(entityBean, outlineBean, request);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void checkOrphanRemoval(MergeRequest request) {
|
|
if (one.isOrphanRemoval()) {
|
|
EntityBean outlineBean = getEntityBean(request.getOutline());
|
|
if (outlineBean != null) {
|
|
request.addDelete(outlineBean);
|
|
}
|
|
}
|
|
}
|
|
|
|
private boolean isUpdate(Object beanId, Object outlineId, MergeRequest request) {
|
|
return Objects.equals(beanId, outlineId)
|
|
|| !request.isClientGeneratedIds()
|
|
|| request.idExists(targetDescriptor.getBeanType(), beanId);
|
|
}
|
|
|
|
private EntityBean getEntityBean(Object bean) {
|
|
return (EntityBean) one.getVal(bean);
|
|
}
|
|
}
|