Jpa中findOne、getOne、findById簡單區別

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章