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