java - Spring/Hibernate : spring.实体。下载无法转换为java.lang.Integer

标签 java spring hibernate

我最近开始尝试学习java并完成了spring/hibernate类(class),旨在在业余时间实现工作中一些问题的解决方案。不用说,我遇到了障碍。

我想知道是否有人可以看到下面附加的代码有任何明显错误,可能导致以下错误:

    SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/sonya-local] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: com.sonya.spring.entity.Downloads cannot be cast to java.lang.Integer] with root cause
java.lang.ClassCastException: com.sonya.spring.entity.Downloads cannot be cast to java.lang.Integer
    at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:19)
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:46)
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:74)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:272)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:53)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor.java:82)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.execute(BasicExecutor.java:59)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:429)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:374)
    at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1495)
    at org.hibernate.query.internal.AbstractProducedQuery.doExecuteUpdate(AbstractProducedQuery.java:1507)
    at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1485)
    at com.sonya.spring.dao.DownloadsDAOImpl.archiveProduct(DownloadsDAOImpl.java:128)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:52)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy50.archiveProduct(Unknown Source)
at com.sonya.spring.service.DownloadsServiceImpl.archiveProduct(DownloadsServiceImpl.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)

基本上,我希望在一小段时间(1 小时)后在表之间移动数据,到目前为止,我已经成功添加了时间戳和一些其他功能,例如搜索、API 调用等。

其最终目标是附加一个调度程序并让它在一天中定期运行,但现在我添加了一个 url 映射来手动触发它。

当点击 URL 时,我收到上述错误:

我的代码:

Controller 代码

 @GetMapping("/archiveproducts")
    public String archiveDownloads (){

         List<Downloads> theDownloads = downloadsService.getDownloads();


         for (Downloads archiveDownload : theDownloads)  {

            // display the download ... just for clarity
            System.out.println(archiveDownload);

            Date timer = new Date();
            Date purge = archiveDownload.getTimestamp();
            long hours  = (timer.getTime() - purge.getTime()) / DateTimeConstants.MILLIS_PER_HOUR;

            if (hours >= 1) {

            downloadsService.archiveProduct(archiveDownload);

            }
        }
        return "list-downloads";
 }

下载DAOimpl代码:(java:128)

public List<Downloads> archiveProduct(Downloads archiveDownload) {

    Session currentSession = sessionFactory.getCurrentSession();

    Query theCopyQuery = 
            currentSession.createQuery("insert into Archive(fieldOne, fieldTwo, fieldThree, fieldFour, fieldFive, , fieldSix, FieldSeven)"
                    + "sfieldOne, fieldTwo, fieldThree, fieldFour, fieldFive, , fieldSix, FieldSeven from Downloads where id=:theId");
    theCopyQuery.setParameter("theId", archiveDownload);

    theCopyQuery.executeUpdate();

    List<Downloads> archiveProducts = theCopyQuery.getResultList();

    Query theDeleteQuery = 
            currentSession.createQuery("delete from Downloads where id=:theId");
    theDeleteQuery.setParameter("theId", archiveDownload);

    theDeleteQuery.executeUpdate(); 

   // return the results        
   return archiveProducts;
}

DownloadsServiceImpl.java:65

@Override
@Transactional
public List<Downloads> archiveProduct(Downloads archiveDownload) {

    return downloadsDAO.archiveProduct(archiveDownload);
}

我知道它告诉我不能将实体转换为整数。但我不明白这个整数是从哪里来的,也不知道如何修复/重新喜欢它。我对其中一个 API 使用了类似的代码方法,而且效果很好。

@PostMapping("/listdownloads")
public List<Downloads> addDownloads (@RequestBody List<Downloads> theDownloads){

        for (Downloads tempDownload : theDownloads) {

        // display the download ... just for clarity
         tempDownload.setId(0);
         tempDownload.setTimestamp(null);
         System.out.println(tempDownload);

          // save to the database
          downloadsService.saveProduct(tempDownload);
        }   

干杯,

丹尼

最佳答案

我认为问题出在这一行。

theDeleteQuery.setParameter("theId", archiveDownload);

它需要一个整数作为 Id,但您传递了错误消息中提到的 Downloads 对象。你可以尝试这样的事情。

theDeleteQuery.setParameter("theId", archiveDownload.getId());

关于java - Spring/Hibernate : spring.实体。下载无法转换为java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52153285/

相关文章:

java - 使用 Jpa Repository 按顺序保存子对象

Java Swing 将类动态加载到面板中

java - JSF f :selectItems using List error

java - 错误 java.sql.SQLException : not implemented by SQLite JDBC driver when Retrieving Blob (Image) from Database

spring - 为什么 @Autowired 在 @Configuration 内部时无需 @Component 即可工作

java - 跨 Hibernate session 和普通 jdbc 的单个事务

Java eclipse : Programmatically import plug-ins and fragments

Spring Cloud Dataflow - 处理任务中的参数

java - 从 intellij 运行时,Spring 初始化不同

sql - 性能问题 : difference between select s. * 与 select *