![](/img/trans.png)
[英]Hibernate Search: DateBridge is throwing npe for null fields
[英]DateBridge for LocalDate in Hibernate Search
我在SpringBoot應用程序中使用Hibernate search 11.5.2.Final。
我正在嘗試搜索實體Book
createdAt
字段。
當我運行它時,應用程序退出,並顯示異常
Unable to create bean for LocalDateBridge
對於類型為Long
字段,我也得到了相同的異常
我的實體看起來像這樣
@Indexed
@Entity
public class Book {
@Id
private Long id;
@Field
@DateBridge(resolution=Resolution.DAY)
private LocalDate createdAt;
// Other fields and setters & getters
}
這是完整堆棧跟蹤
2019-08-05 13:42:57.789 WARN 14452 --- [nio-8080-exec-1] g.e.SimpleDataFetcherExceptionHandler : Exception while fetching data (/Books) : Exception while calling bridge#objectToString
entity class: com.app.model.Book
entity property path: createdAt
field bridge: TwoWayString2FieldBridgeAdaptor [stringBridge=org.hibernate.search.bridge.builtin.time.impl.LocalDateBridge@4ef6ee21]
org.hibernate.search.bridge.BridgeException: Exception while calling bridge#objectToString
entity class: com.app.model.Book
entity property path: createdAt
field bridge: TwoWayString2FieldBridgeAdaptor [stringBridge=org.hibernate.search.bridge.builtin.time.impl.LocalDateTimeBridge@4ef6ee21]
at org.hibernate.search.bridge.util.impl.ContextualExceptionBridgeHelper.buildBridgeException(ContextualExceptionBridgeHelper.java:104) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.bridge.util.impl.ContextualExceptionBridgeHelper$TwoWayConversionContextImpl.objectToString(ContextualExceptionBridgeHelper.java:161) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.objectToString(DocumentBuilderIndexedEntity.java:274) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.objectToString(DocumentBuilderIndexedEntity.java:1066) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.objectToString(DocumentBuilderIndexedEntity.java:1049) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.query.dsl.impl.FieldContext.objectToString(FieldContext.java:75) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.buildSearchTerm(ConnectedMultiFieldsTermQueryBuilder.java:149) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:113) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:81) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_40]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_40]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_40]
at io.leangen.graphql.metadata.execution.SingletonMethodInvoker.execute(SingletonMethodInvoker.java:21) ~[spqr-0.9.9.jar:na]
at io.leangen.graphql.metadata.Resolver.resolve(Resolver.java:100) ~[spqr-0.9.9.jar:na]
at io.leangen.graphql.execution.OperationExecutor.lambda$execute$1(OperationExecutor.java:93) ~[spqr-0.9.9.jar:na]
at io.leangen.graphql.execution.OperationExecutor$$Lambda$1440/231233146.aroundInvoke(Unknown Source) ~[na:na]
at io.leangen.graphql.execution.OperationExecutor.execute(OperationExecutor.java:98) ~[spqr-0.9.9.jar:na]
at io.leangen.graphql.execution.OperationExecutor.execute(OperationExecutor.java:94) ~[spqr-0.9.9.jar:na]
at io.leangen.graphql.execution.OperationExecutor.execute(OperationExecutor.java:59) ~[spqr-0.9.9.jar:na]
at io.leangen.graphql.generator.OperationMapper$$Lambda$1152/966240044.get(Unknown Source) ~[na:na]
at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:261) [graphql-java-11.0.jar:na]
at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:202) [graphql-java-11.0.jar:na]
at graphql.execution.AsyncExecutionStrategy.execute(AsyncExecutionStrategy.java:70) [graphql-java-11.0.jar:na]
at graphql.execution.Execution.executeOperation(Execution.java:159) [graphql-java-11.0.jar:na]
at graphql.execution.Execution.execute(Execution.java:101) [graphql-java-11.0.jar:na]
at graphql.GraphQL.execute(GraphQL.java:573) [graphql-java-11.0.jar:na]
at graphql.GraphQL.parseValidateAndExecute(GraphQL.java:515) [graphql-java-11.0.jar:na]
at graphql.GraphQL.executeAsync(GraphQL.java:489) [graphql-java-11.0.jar:na]
at graphql.GraphQL.execute(GraphQL.java:420) [graphql-java-11.0.jar:na]
at io.leangen.graphql.spqr.spring.web.servlet.DefaultGraphQLExecutor.execute(DefaultGraphQLExecutor.java:23) [graphql-spqr-spring-boot-autoconfigure-0.0.4.jar:na]
at io.leangen.graphql.spqr.spring.web.servlet.DefaultGraphQLExecutor.execute(DefaultGraphQLExecutor.java:11) [graphql-spqr-spring-boot-autoconfigure-0.0.4.jar:na]
at io.leangen.graphql.spqr.spring.web.GraphQLController.executeJsonPost(GraphQLController.java:42) [graphql-spqr-spring-boot-autoconfigure-0.0.4.jar:na]
at io.leangen.graphql.spqr.spring.web.GraphQLController$$FastClassBySpringCGLIB$$db77e769.invoke(<generated>) [graphql-spqr-spring-boot-autoconfigure-0.0.4.jar:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at net.bull.javamelody.MonitoringSpringInterceptor.invoke(MonitoringSpringInterceptor.java:76) [javamelody-core-1.77.0.jar:1.77.0]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) [spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at io.leangen.graphql.spqr.spring.web.servlet.DefaultGraphQLController$$EnhancerBySpringCGLIB$$3b8cd271.executeJsonPost(<generated>) [graphql-spqr-spring-boot-autoconfigure-0.0.4.jar:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.19.jar:9.0.19]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40]
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.time.temporal.TemporalAccessor
at org.hibernate.search.bridge.builtin.time.impl.TemporalAccessorStringBridge.objectToString(TemporalAccessorStringBridge.java:42) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.bridge.util.impl.TwoWayString2FieldBridgeAdaptor.objectToString(TwoWayString2FieldBridgeAdaptor.java:33) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
at org.hibernate.search.bridge.util.impl.ContextualExceptionBridgeHelper$TwoWayConversionContextImpl.objectToString(ContextualExceptionBridgeHelper.java:158) ~[hibernate-search-engine-5.11.2.Final.jar:5.11.2.Final]
... 151 common frames omitted
嘗試刪除@DateBridge(resolution=Resolution.DAY)
:對於您的情況,它無用,因為本地日期的分辨率已經是當天。
該問題可能是由於java.time
類型不支持顯式解析,而僅對遺留java.util.Date
/ java.util.Calendar
類型(實際上可能有用)支持。
如果這不能解決問題,請在您的問題中粘貼完整的堆棧跟蹤。
根據您的堆棧跟蹤,您正在將String
對象傳遞給查詢構建器,而應該使用LocalDate
對象,因為您的字段的類型為LocalDate
。 將用戶提供的字符串解析為LocalDate
,然后將該對象傳遞給查詢構建器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.