刷新Spring Boot上下文的Jooq CastException

时间:2018-04-24 00:56:48

标签: java spring spring-boot jooq

当春季启动首次启动时,jooq运行良好。 但是,如果我对代码进行更改并在弹出引导上下文后刷新, 然后我遇到了类转换异常的麻烦。 问题是在同一个类上抛出异常。

我的启动内容是:

@Autowired
private DataSource dataSource;
public ExecuteListener exceptionTransformer() {
    return new DefaultExecuteListener() {
        private static final long serialVersionUID = 1L;
        @Override
        public void exception(ExecuteContext context) {
            SQLDialect dialect = context.configuration().dialect();
            SQLExceptionTranslator translator = (dialect != null)
                ? new SQLErrorCodeSQLExceptionTranslator(dialect.name())
                : new SQLStateSQLExceptionTranslator();
            context.exception(
                translator.translate("jOOQ", context.sql(), context.sqlException()));
        }
    };
}
@Primary
@Bean
public DefaultDSLContext dsl() {
    return new DefaultDSLContext(configuration());
}
public DataSourceConnectionProvider connectionProvider() {
    return new DataSourceConnectionProvider(new TransactionAwareDataSourceProxy(dataSource));
}
public DefaultConfiguration configuration() {
    DefaultConfiguration configuration = new DefaultConfiguration();
    configuration.set(connectionProvider());
    configuration.set(new DefaultExecuteListenerProvider(exceptionTransformer()));
    configuration.set(SQLDialect.MYSQL);
    // @formatter:off
    configuration.set(
        new Settings()
        .withExecuteLogging(true)
        .withRenderFormatted(true)
        );
    // @formatter:on
    configuration.set(SfmRecordMapperProviderFactory.newInstance().ignorePropertyNotFound().newProvider());
    return configuration;
}

查询代码是:

User user = dsl.select()
    .from(USER)
    .where(USER.USER_ID.eq(id)).fetchOneInto(User.class);

admin.domain.User是:

@Data
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private String userId;
    @JsonIgnore
    private String pswd;
    private String name;
    private String useYn;
    private Timestamp registDatetime;
    private Timestamp updateDatetime;
}

堆栈跟踪是:

java.lang.ClassCastException: admin.domain.User cannot be cast to admin.domain.User
    at admin.dao.UserDao.getUserByIdWithRoles(UserDao.java:123)
    at admin.dao.UserDao$$FastClassBySpringCGLIB$$f7b71f39.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

我的错是什么?