java - Srping/休眠:spring.entity.Downloads 不能转换为 java.lang.Integer
问题描述
我最近开始尝试学习 java 并完成了 spring/hibernate 课程,目的是在业余时间解决工作中的一些问题。不用说,我遇到了障碍。
我想知道是否有人可以看到下面附加的代码有任何明显错误的地方,这可能导致以下错误:
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 时,我收到上述错误:
我的代码:
控制器代码
@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;
}
下载ServiceImpl.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());
推荐阅读
- .net - F#中的“导入”等价物是什么
- c# - 将 XAML“标签”绑定到 Xamarin.Forms 中“公共常量”后面的代码?
- javascript - “document.querySelector(...) 为空”错误
- rest-assured - 将 REST API 请求 json 值提取到 RestAssured 中的变量
- rust - 每次调用 Future::poll 时是否需要注册一个新的唤醒器?
- android - 条码扫描方法 - 带有 nativescript-barcodescanner 的原生脚本
- elasticsearch - 热节点和温节点上的 Elasticsearch 搜索查询
- php - 为什么 symfony 创建不正确的 mysql 请求
- javascript - 在 Clickevent 上使用 Javascript 将动画应用于 HTML 标记
- c++ - 如何更新和重写 CGAL 3D 网格文件