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

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