自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(11)
  • 收藏
  • 关注

原创 detached entity passed to persist问题与解决方案

JPA save对象的时候有时候会遇到如题的错误,可能有两种原因:1.该对象定义的是自动生成id的方式,insert的时候写入的id在数据库中已存在。    网上搜到的比较多的都是这种情况,但个人认为,实际项目中这么玩的情况很少,生成新对象谁会自己写入id。2.笔者实际项目遇到的场景:对象A与对象B为一对多关系,即A中包含一个Set<B>类型成员,前端传来一堆数据,后台把这...

2018-08-28 17:58:31 35121 6

原创 JPA懒加载失败问题解决

在使用JPA或者Hibernate的时候,我们经常用懒加载来提高访问效率,例如:Class A { @OneToMany(mappedBy = "a",fetch=FetchType.LAZY) private Set<B> objBs;}A对象中懒加载B对象。典型的使用场景:A a = repository.findA(...);...Se...

2019-01-07 15:43:06 2085

原创 记录操作日志的一般套路

记录操作日志是web系统做安全审计和系统维护的重要手段,这里总结笔者在用java和python开发web系统过程中总结出来的、具有普遍意义的方法。在java体系下,网络上搜索了一下,几乎一边倒的做法是用AOP,通过注解的方式记录操作日志,在此,笔者并不是很认同这种做法,原因如下:AOP的应用场景是各种接口中可以抽象出普遍的行为,且切入点选择需要在各接口中比较统一。 记录审计日志除了ip、...

2018-11-24 17:17:41 17074 5

原创 封装类型变量比较问题

现象:code review中发现有代码中用下面的方式比较Integer变量:这种方式是有风险的,当整型数据的值超出-128-127的范围时,两个值相同的Integer变量用==比较会返回false。来看看测试结果:原因分析:在Integer类中有一个IntegerCache类,来看看这个类的说明:IntegerCache中定义了一个Integer数组,初始化-...

2018-11-23 10:06:18 269

原创 REST知识总结

近期code review过程中发现部分小伙伴对REST不甚了解,这里进行一次简单的科普。首先,REST不是“协议”,甚至称不上“规范”,只能称为一种“原则”,或者一种“实践”。这句话隐含的意思就是,你抛弃REST的这些原则并不会影响你接口功能的完成。这就好比,“拿起筷子,把食物塞进嘴里”这一连串动作,正常人类叫做“吃(eat)”,你如果偏要叫“睡觉(sleep)”,并不会影响你完成这些动...

2018-11-23 10:02:03 273

原创 基于scrum的敏捷开发流程总结

本文主要来源于华为软件开发流程,同时根据在创业团队的实践在细节上稍有修改。需求管理先了解几个概念:IR(Initial Requirement):原始需求。这种需求来自客户,一般由产品经理/需求经理编写。如果是研发内部产生的需求,可以不需要有IR。SR(System Requirement):系统需求。架构师对IR进行分析以后,结合系统设计,将需求描述成一个个要实现的子系统或者模块...

2018-11-05 16:39:40 9818 1

原创 软件开发中,站立会议的必要性

        笔者经历过大到600人、小到20人的项目团队,很多团队中会引入敏捷尤其是scrum实践,其中一个重要的实践是站立会议,遇到过团队成员抱怨站立会议浪费时间,甚至在有些团队中leader也持这种观点,最后坚持不了几次就不了了之了。那么,站立会议(甚至说敏捷)是否有必要呢?        我很能理解团队成员抱怨站立会议浪费时间,开发人员是软件工程的直接实施者,他们的感受一定是来源于实...

2018-10-11 20:44:02 1656

原创 java深拷贝的三种方式

问题:spring boot/JPA项目中,修改某个对象以后需要生成一个VO对象给客户端,数据库对应的POJO对象里有个Map类型的对象(名字叫para),这个对象的value又是个Map,我使用Map的putAll()方法拷贝了一份para,然后修改里面的值,最后发现para的内容也被修改了。示例代码如下:this.para.putAll(po.getPara());// fields是...

2018-09-18 11:45:27 37461 2

原创 JPA分页查询总数计算错误问题(自定义Repository实现的方法)

问题背景:    上一篇博客(JPA排序中的join排序及case when的使用)中有提到一个场景:对象A中包含了Set<B> objBs这样一个成员,要求查询A时按A中包含的B数量排序,当时的解决方案是count一下B,然后order by这个count,详见上一篇博客。    上面的方法确实解决了排序的问题,但是经过多次测试发现,当按照objBs排序、查询第一页时,数据正...

2018-08-03 17:10:14 8572 4

原创 JPA排序中的join排序及case when的使用

最近项目中开始使用JPA,使用过程中有两个排序场景遇到的问题,在此将问题及解决方法作一个记录。先抛出问题:model类A中包含Set<B>成员,即一对多关系,要求查询A的时候按A包含的B对象个数来排序。 model类A中包含一个String subType字段,该字段在数据库中保存的是"00/01/11"这样的数字字符串数据,但是在界面显示的是中文描述信息,这个中文描述信息与...

2018-08-01 21:21:01 2681

原创 一种根据ProtoBuf字段变化动态解析PB数据的方案

需求分析    先来回顾一下解析PB数据的常规流程:先定义好proto文件,然后使用protoc工具生成java代码,再使用生成的代码里的parseFrom方法去解析PB数据。    有这样一种场景,使用过程中,PB数据定义有变更,比如增删改了字段,常规方法是修改proto文件,重新生成java代码重新打包。那么需求来了,能不能做到做到PB数据字段变更后不打包、仅重启进程就能解析新的数据呢?解决方...

2018-04-24 18:23:31 3633

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除