解决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
相关文章推荐
- 解决Hibernate 注解在属性上 ,多对一,一对一懒加载 当调用one那一方getId 也会查数据库的问题
- Hibernate使用property-ref属性解决遗留数据库One To Many关系的问题。
- 解决hibernate产生的id序列或者setXX不能同步到数据库到问题(this.hibernateTemplate.flush();hibernateTemplate.getSessionFactory().getCurrentSession().connection().commit())
- Hibernate使用property-ref属性解决遗留数据库One To Many关系的问题。
- getHibernateTemplate().save() 未保存到数据库问题之解决
- Java调用BCP导入数据到数据库解决标识列ID问题
- 解决ViewPager+fragment预加载问题(getItem()两次调用)
- 关于JPA封装数据库数据到实体不调用属性的get和set的方法解决办法
- 解决getHibernateTemplate().save ()不能将数据保存到数据库的问题
- Hibernate主键一对一关联映射实例【xml和注解版本@OneToOne@JoinColumn(name="wifeId")--主键单向】(十二)
- 解决getHibernateTemplate().save ()不能将数据保存到数据库的问题
- mongo-node 利用eval属性完成数据库的增删改(可以使用mongodb的原生语言,解决ID自增问题)
- linux下用php调用PDO链接出错问题 pdo未加载解决方法
- 使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session or session was closed)
- 解决 Silverlight 调用 WCF 服务 跨域访问 和 Silverlight 引用服务后配置文件不加载的问题
- 解决Weblogic 配置连接池加载数据库驱动失败问题
- Hibernate延迟加载 或 no session or session was closed 问题的解决(OpenSessionInViewFilter使用)
- SQL Server 无法查看数据库属性问题的解决
- 解决 Silverlight 调用 WCF 服务 跨域访问 和 Silverlight 引用服务后配置文件不加载的问题
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法