Java-java-com-util-common-service:TreeService.java
ylbtech-Java-java-com-util-common-service:TreeService.java |
1.返回顶部 |
- package com.shineyoo.manager.util.common.service;
- import java.util.List;
- import org.springframework.transaction.annotation.Transactional;
- import com.shineyoo.manager.util.common.persistence.TreeDao;
- import com.shineyoo.manager.util.common.persistence.TreeEntity;
- import com.shineyoo.manager.util.common.utils.Reflections;
- import com.shineyoo.manager.util.common.utils.StringUtils;
- /**
- * Service基类
- * @author
- * @version 2014-05-16
- */
- @Transactional(readOnly = true)
- public abstract class TreeService<D extends TreeDao<T>, T extends TreeEntity<T>> extends CrudService<D, T> {
- @Transactional(readOnly = false)
- public void save(T entity) {
- @SuppressWarnings("unchecked")
- Class<T> entityClass = Reflections.getClassGenricType(getClass(), 1);
- // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
- if (entity.getParent() == null || StringUtils.isBlank(entity.getParentId())
- || "0".equals(entity.getParentId())){
- entity.setParent(null);
- }else{
- entity.setParent(super.get(entity.getParentId()));
- }
- if (entity.getParent() == null){
- T parentEntity = null;
- try {
- parentEntity = entityClass.getConstructor(String.class).newInstance("0");
- } catch (Exception e) {
- throw new ServiceException(e);
- }
- entity.setParent(parentEntity);
- entity.getParent().setParentIds(StringUtils.EMPTY);
- }
- // 获取修改前的parentIds,用于更新子节点的parentIds
- String oldParentIds = entity.getParentIds();
- // 设置新的父节点串
- entity.setParentIds(entity.getParent().getParentIds()+entity.getParent().getId()+",");
- // 保存或更新实体
- super.save(entity);
- // 更新子节点 parentIds
- T o = null;
- try {
- o = entityClass.newInstance();
- } catch (Exception e) {
- throw new ServiceException(e);
- }
- o.setParentIds("%,"+entity.getId()+",%");
- List<T> list = dao.findByParentIdsLike(o);
- for (T e : list){
- if (e.getParentIds() != null && oldParentIds != null){
- e.setParentIds(e.getParentIds().replace(oldParentIds, entity.getParentIds()));
- preUpdateChild(entity, e);
- dao.updateParentIds(e);
- }
- }
- }
- /**
- * 预留接口,用户更新子节前调用
- * @param childEntity
- */
- protected void preUpdateChild(T entity, T childEntity) {
- }
- }
2.返回顶部 |
3.返回顶部 |
4.返回顶部 |
5.返回顶部 |
6.返回顶部 |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
Java-java-com-util-common-service:TreeService.java的更多相关文章
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...
- 转: 【Java并发编程】之十七:深入Java内存模型—内存操作规则总结
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17377197 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则, ...
- Java-java-com-util-common-service:ServiceException.java
ylbtech-Java-java-com-util-common-service:ServiceException.java 1.返回顶部 1. package com.shineyoo.manag ...
- Java-java-com-util-common-service:CrudService.java
ylbtech-Java-java-com-util-common-service:CrudService.java 1.返回顶部 1. package com.shineyoo.manager.ut ...
- java-com-util-common-service:BaseService.java
ylbtech-java-com-util-common-service:BaseService.java 1.返回顶部 1. package com.shineyoo.manager.util.co ...
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- Java知多少(25)再谈Java包
在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...
随机推荐
- vim之补全2(完全个人定制版)
关于补全的方面要说的的确很多, 这里选择分为两个章叙述. 如果你想学vim, 你需要有很强的耐心, 如果你想锻炼这种耐心, 你可以试着先看完我之前的文章. 好了, 下面继续我们的vim补全吧. vim ...
- 预处理、const、static、sizeof
1.预处理和宏定义 #define xxxx #ifdef xxxx ; #elseif xxxx; #endif 2.c++求随机数 rand(),rand()会返回一随机数值, 范围在0至RAND ...
- day09-文件的操作
目录 文件的基本操作 文件 什么是文件 如何使用文件 打开&关闭文件 打开&关闭文件 del f和f.close()的区别 文件路径 打开模式(不写默认是r) 编码格式 补充(open ...
- 移动的 touch事件中的touches、targetTouches和changedTouches
touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...
- JTable设置表格背景颜色——隔行不同
package view; import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import ja ...
- Linux 环境下安装python相关
目录 Linux 环境下安装python相关 linux软件包管理工具之yum工具(如同pip3工具) yum源理解 下载阿里云的.repo仓库文件 ,放到/etc/yum.repos.d/ yum安 ...
- saving snaps iteratively with for loop in Paraview
Goal: read data 1 and slice, then save pressure, velocity contours, close data, then do loop for the ...
- Android实现ViewPager无限循环滚动回绕
Android实现ViewPager无限循环滚动回绕 Android系统提供的ViewPager标准方式是左右可以自由滑动,但是滑动到最左边的极限位置是第一个page,滑动到最右边的位置是最后一 ...
- [USACO16OPEN]关闭农场Closing the Farm(洛谷 3144)
题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to tem ...
- 实战体验几种MySQLCluster方案
来源:keepLearning的专栏 http://www.2cto.com/database/201504/387166.html 1.背景 MySQL的cluster方案有很多官方和第三 ...