您的位置:首页 > 数据库

解决Hibernate 注解在属性上 ,多对一,一对一懒加载 当调用one那一方getId 也会查数据库的问题

2017-08-31 10:42 411 查看
使用 hibernate5.0 版本 spring boot jpa 搭建测试首先这个问题出现的原因是把注解写在了属性上并且fetchType=lazy,写在属性上找起来方便,但是也带了一个问题,就是在getOne那一方的id的时候会查询数据库,这是我们不希望的,我们可能更想要的是在调用类似getName的方法时候查询数据库。出现这种情况的原因是hibernate并不能找到getIdentifierMethod ,如下图如果在产生个这个代理类的时候就知道这个getIdentifierMethod那么getId的时候就不会去查数据库,接下来看PojoEntityTuplizer的buildProxyFactory方法Getter是一个接口 如果我们注解放到属性上会使用GetterFieldImpl的实现,结果默认返回null所有我们只要在这里设置getIdentifierMethod就可以,在classPath面覆盖掉这个类就可以了,实现getMethod方法这样的话getId就不会去查询数据库了您可以放心修改 因为GetterFieldImpl是*.spi下的类 spi下的就是让扩展的下载源码后 直接修改数据库连接 application.yml  
运行 test包下的 HibernateApplicationTests 的save和query方法即可 然后看看sql的打印情况
下载地址 https://git.oschina.net/hxy_happy_java/spring-boot-hibernate

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐