Java
文章平均质量分 62
TOTTI-10
这个作者很懒,什么都没留下…
展开
-
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 · 8746 阅读 · 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 · 2807 阅读 · 0 评论 -
detached entity passed to persist问题与解决方案
JPA save对象的时候有时候会遇到如题的错误,可能有两种原因:1.该对象定义的是自动生成id的方式,insert的时候写入的id在数据库中已存在。 网上搜到的比较多的都是这种情况,但个人认为,实际项目中这么玩的情况很少,生成新对象谁会自己写入id。2.笔者实际项目遇到的场景:对象A与对象B为一对多关系,即A中包含一个Set<B>类型成员,前端传来一堆数据,后台把这...原创 2018-08-28 17:58:31 · 35772 阅读 · 6 评论 -
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 · 38009 阅读 · 2 评论 -
封装类型变量比较问题
现象:code review中发现有代码中用下面的方式比较Integer变量:这种方式是有风险的,当整型数据的值超出-128-127的范围时,两个值相同的Integer变量用==比较会返回false。来看看测试结果:原因分析:在Integer类中有一个IntegerCache类,来看看这个类的说明:IntegerCache中定义了一个Integer数组,初始化-...原创 2018-11-23 10:06:18 · 314 阅读 · 0 评论 -
记录操作日志的一般套路
记录操作日志是web系统做安全审计和系统维护的重要手段,这里总结笔者在用java和python开发web系统过程中总结出来的、具有普遍意义的方法。在java体系下,网络上搜索了一下,几乎一边倒的做法是用AOP,通过注解的方式记录操作日志,在此,笔者并不是很认同这种做法,原因如下:AOP的应用场景是各种接口中可以抽象出普遍的行为,且切入点选择需要在各接口中比较统一。 记录审计日志除了ip、...原创 2018-11-24 17:17:41 · 17154 阅读 · 5 评论 -
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 · 2146 阅读 · 0 评论