private BeanPropertyAssocOne<?>[] getOne(boolean imported, Mode mode) { ArrayList<BeanPropertyAssocOne<?>> list = new ArrayList<>(); for (BeanPropertyAssocOne<?> prop : ones) { if (imported != prop.isOneToOneExported()) { switch (mode) { case Save: if (prop.getCascadeInfo().isSave()) { list.add(prop); } break; case Delete: if (prop.getCascadeInfo().isDelete()) { list.add(prop); } break; default: break; } } } return (BeanPropertyAssocOne[]) list.toArray(new BeanPropertyAssocOne[list.size()]); }
/** * Return true if REFRESH should cascade. */ public boolean isCascadeRefresh() { return cascadeInfo.isRefresh(); }
public void setElementCollection() { elementCollection = true; cascadeInfo.setSaveDelete(true, true); setModifyListenMode(ModifyListenMode.ALL); }
/** * Set as export side of OneToOne with PrimaryKeyJoin. */ public void setPrimaryKeyExport() { this.primaryKeyExport = true; this.oneToOneExported = true; if (!cascadeInfo.isSave()) { // we pretty much need to cascade save so turning that on automatically ... cascadeInfo.setType(CascadeType.ALL); } }
prop.getCascadeInfo().setSaveDelete(true, true); prop.getCascadeInfo().setDelete(false);
public boolean isIncludeCascadeSave() { // Note ManyToMany always included as we always 'save' // the relationship via insert/delete of intersection table // REMOVALS means including PrivateOwned relationships return cascadeInfo.isSave() || hasJoinTable() || ModifyListenMode.REMOVALS == modifyListenMode; }
public boolean isIncludeCascadeDelete() { return cascadeInfo.isDelete() || o2mJoinTable || ModifyListenMode.REMOVALS == modifyListenMode; }
public void setTypes(CascadeType[] types) { for (CascadeType type : types) { setType(type); } }
/** * Helper method to set cascade types to the CascadeInfo on BeanProperty. */ protected void setCascadeTypes(CascadeType[] cascadeTypes, BeanCascadeInfo cascadeInfo) { if (cascadeTypes != null && cascadeTypes.length > 0) { cascadeInfo.setTypes(cascadeTypes); } }
/** * Set as export side of OneToOne with PrimaryKeyJoin. */ public void setPrimaryKeyExport() { this.primaryKeyExport = true; this.oneToOneExported = true; if (!cascadeInfo.isSave()) { // we pretty much need to cascade save so turning that on automatically ... cascadeInfo.setType(CascadeType.ALL); } }
prop.getCascadeInfo().setSaveDelete(true, true); prop.getCascadeInfo().setDelete(false);
SaveManyBeans(boolean insertedParent, BeanPropertyAssocMany<?> many, EntityBean parentBean, PersistRequestBean<?> request, DefaultPersister persister) { super(insertedParent, many, parentBean, request); this.persister = persister; this.cascade = many.getCascadeInfo().isSave(); this.publish = request.isPublish(); this.targetDescriptor = many.getTargetDescriptor(); this.isMap = many.getManyType().isMap(); this.saveRecurseSkippable = many.isSaveRecurseSkippable(); this.deleteMode = targetDescriptor.isSoftDelete() ? DeleteMode.SOFT : DeleteMode.HARD; }
public boolean isIncludeCascadeDelete() { return cascadeInfo.isDelete() || o2mJoinTable || ModifyListenMode.REMOVALS == modifyListenMode; }
public void setTypes(CascadeType[] types) { for (CascadeType type : types) { setType(type); } }
/** * Helper method to set cascade types to the CascadeInfo on BeanProperty. */ protected void setCascadeTypes(CascadeType[] cascadeTypes, BeanCascadeInfo cascadeInfo) { if (cascadeTypes != null && cascadeTypes.length > 0) { cascadeInfo.setTypes(cascadeTypes); } }
private BeanPropertyAssocOne<?>[] getOne(boolean imported, Mode mode) { ArrayList<BeanPropertyAssocOne<?>> list = new ArrayList<>(); for (BeanPropertyAssocOne<?> prop : ones) { if (imported != prop.isOneToOneExported()) { switch (mode) { case Save: if (prop.getCascadeInfo().isSave()) { list.add(prop); } break; case Delete: if (prop.getCascadeInfo().isDelete()) { list.add(prop); } break; default: break; } } } return (BeanPropertyAssocOne[]) list.toArray(new BeanPropertyAssocOne[list.size()]); }
if (!oneToMany.getCascadeInfo().isSave()) {
/** * Delete the 'many' detail beans for a given parent bean. * <p> * For stateless updates this deletes details beans that are no longer in * the many - the excludeDetailIds holds the detail beans that are in the * collection (and should not be deleted). * </p> */ void deleteManyDetails(SpiTransaction t, BeanDescriptor<?> desc, EntityBean parentBean, BeanPropertyAssocMany<?> many, List<Object> excludeDetailIds, DeleteMode deleteMode) { if (many.getCascadeInfo().isDelete()) { // cascade delete the beans in the collection BeanDescriptor<?> targetDesc = many.getTargetDescriptor(); if (deleteMode.isHard() || targetDesc.isSoftDelete()) { if (targetDesc.isDeleteByStatement()) { // Just delete all the children with one statement IntersectionRow intRow = many.buildManyDeleteChildren(parentBean, excludeDetailIds); SqlUpdate sqlDelete = intRow.createDelete(server, deleteMode); executeSqlUpdate(sqlDelete, t); } else { // Delete recurse using the Id values of the children Object parentId = desc.getId(parentBean); List<Object> idsByParentId = many.findIdsByParentId(parentId, null, t, excludeDetailIds, deleteMode.isHard()); if (!idsByParentId.isEmpty()) { deleteChildrenById(t, targetDesc, idsByParentId, deleteMode); } } } } }