1.getOne 返回一个实体对象的引用,为空会抛出异常。
但是查询时会报异常:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.crzis.domain.User_$$_jvst217_0["handler"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.9.7.jar:2.9.7]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) ~[jackson-databind-2.9.7.jar:2.9.7]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:313) ~[jackson-databind-2.9.7.jar:2.9.7]
原因是:因为jsonplugin用的是java的内审机制,hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,jsonplugin会把hibernateLazyInitializer也拿出来操作,并读取里面一个不能被反射操作的属性就产生了这个异常。
解决:在实体类上加入注解:
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
2.findById 返回一个Optional对象
Optional 可以存null,是实体对象的包装对象。可以通过get方法获取到实体对象:
3.findOne 返回一个Optional对象,可以实现条件查询
入参是一个Example对象,这个对象就是查询条件的包装对象。
使用: 使用id作为查询条件,包装成Example对象作为入参。
简单区别分析
参考: https://blog.csdn.net/liu_yulong/article/details/84594771