ylbtech-Java-java-com-util-common-service:TreeService.java
1.返回顶部
1、
  1. package com.shineyoo.manager.util.common.service;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.transaction.annotation.Transactional;
  6.  
  7. import com.shineyoo.manager.util.common.persistence.TreeDao;
  8. import com.shineyoo.manager.util.common.persistence.TreeEntity;
  9. import com.shineyoo.manager.util.common.utils.Reflections;
  10. import com.shineyoo.manager.util.common.utils.StringUtils;
  11.  
  12. /**
  13. * Service基类
  14. * @author
  15. * @version 2014-05-16
  16. */
  17. @Transactional(readOnly = true)
  18. public abstract class TreeService<D extends TreeDao<T>, T extends TreeEntity<T>> extends CrudService<D, T> {
  19.  
  20. @Transactional(readOnly = false)
  21. public void save(T entity) {
  22.  
  23. @SuppressWarnings("unchecked")
  24. Class<T> entityClass = Reflections.getClassGenricType(getClass(), 1);
  25.  
  26. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  27. if (entity.getParent() == null || StringUtils.isBlank(entity.getParentId())
  28. || "0".equals(entity.getParentId())){
  29. entity.setParent(null);
  30. }else{
  31. entity.setParent(super.get(entity.getParentId()));
  32. }
  33. if (entity.getParent() == null){
  34. T parentEntity = null;
  35. try {
  36. parentEntity = entityClass.getConstructor(String.class).newInstance("0");
  37. } catch (Exception e) {
  38. throw new ServiceException(e);
  39. }
  40. entity.setParent(parentEntity);
  41. entity.getParent().setParentIds(StringUtils.EMPTY);
  42. }
  43.  
  44. // 获取修改前的parentIds,用于更新子节点的parentIds
  45. String oldParentIds = entity.getParentIds();
  46.  
  47. // 设置新的父节点串
  48. entity.setParentIds(entity.getParent().getParentIds()+entity.getParent().getId()+",");
  49.  
  50. // 保存或更新实体
  51. super.save(entity);
  52.  
  53. // 更新子节点 parentIds
  54. T o = null;
  55. try {
  56. o = entityClass.newInstance();
  57. } catch (Exception e) {
  58. throw new ServiceException(e);
  59. }
  60. o.setParentIds("%,"+entity.getId()+",%");
  61. List<T> list = dao.findByParentIdsLike(o);
  62. for (T e : list){
  63. if (e.getParentIds() != null && oldParentIds != null){
  64. e.setParentIds(e.getParentIds().replace(oldParentIds, entity.getParentIds()));
  65. preUpdateChild(entity, e);
  66. dao.updateParentIds(e);
  67. }
  68. }
  69.  
  70. }
  71.  
  72. /**
  73. * 预留接口,用户更新子节前调用
  74. * @param childEntity
  75. */
  76. protected void preUpdateChild(T entity, T childEntity) {
  77.  
  78. }
  79.  
  80. }
2、
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
 
 
6.返回顶部
 
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Java-java-com-util-common-service:TreeService.java的更多相关文章

  1. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  2. java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

    概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...

  3. 转: 【Java并发编程】之十七:深入Java内存模型—内存操作规则总结

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17377197 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则, ...

  4. Java-java-com-util-common-service:ServiceException.java

    ylbtech-Java-java-com-util-common-service:ServiceException.java 1.返回顶部 1. package com.shineyoo.manag ...

  5. Java-java-com-util-common-service:CrudService.java

    ylbtech-Java-java-com-util-common-service:CrudService.java 1.返回顶部 1. package com.shineyoo.manager.ut ...

  6. java-com-util-common-service:BaseService.java

    ylbtech-java-com-util-common-service:BaseService.java 1.返回顶部 1. package com.shineyoo.manager.util.co ...

  7. java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...

  8. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

  9. Java知多少(25)再谈Java包

    在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...

随机推荐

  1. vim之补全2(完全个人定制版)

    关于补全的方面要说的的确很多, 这里选择分为两个章叙述. 如果你想学vim, 你需要有很强的耐心, 如果你想锻炼这种耐心, 你可以试着先看完我之前的文章. 好了, 下面继续我们的vim补全吧. vim ...

  2. 预处理、const、static、sizeof

    1.预处理和宏定义 #define xxxx #ifdef xxxx ; #elseif xxxx; #endif 2.c++求随机数 rand(),rand()会返回一随机数值, 范围在0至RAND ...

  3. day09-文件的操作

    目录 文件的基本操作 文件 什么是文件 如何使用文件 打开&关闭文件 打开&关闭文件 del f和f.close()的区别 文件路径 打开模式(不写默认是r) 编码格式 补充(open ...

  4. 移动的 touch事件中的touches、targetTouches和changedTouches

    touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...

  5. JTable设置表格背景颜色——隔行不同

    package view; import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import ja ...

  6. Linux 环境下安装python相关

    目录 Linux 环境下安装python相关 linux软件包管理工具之yum工具(如同pip3工具) yum源理解 下载阿里云的.repo仓库文件 ,放到/etc/yum.repos.d/ yum安 ...

  7. 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 ...

  8. Android实现ViewPager无限循环滚动回绕

     Android实现ViewPager无限循环滚动回绕 Android系统提供的ViewPager标准方式是左右可以自由滑动,但是滑动到最左边的极限位置是第一个page,滑动到最右边的位置是最后一 ...

  9. [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 ...

  10. 实战体验几种MySQLCluster方案

    来源:keepLearning的专栏      http://www.2cto.com/database/201504/387166.html 1.背景 MySQL的cluster方案有很多官方和第三 ...