【问题标题】:Passing methods to Controller: java.lang.Long cannot be cast to java.lang.Integer将方法传递给控制器​​:java.lang.Long 不能转换为 java.lang.Integer
【发布时间】:2019-12-19 23:54:08
【问题描述】:

我正在尝试在使用 Java 8、Spring 和 Hibernate 的项目中将方法传递给控制器​​。但是我遇到了“请求处理失败;嵌套异常是 java.lang.ClassCastException:java.lang.Long 无法转换为 java.lang.Integer”错误的问题。

我在 KomitentDAO 的方法是这样的

@Override
public int vratiBroj() {
    Session currentSession = sessionFactory.getCurrentSession();
    int num = 0;
    Query query = currentSession.createQuery("SELECT count(*) from 
Komitent"); 
    num = (int) query.getSingleResult();
    return num;
}

控制器看起来像这样

@GetMapping("/dodaj")
public String prikaziForm(Model theModel) {

    Komitent komt = new Komitent(); 
    int a = komitentService.vratiBroj();
    komt.setSifra(a);   
    theModel.addAttribute("komitent", komt);

    return "komitent-form";
}

我需要在 komt.Sifra 中从我的函数中设置一个整数。该查询只是一个测试,它可以是任何其他返回单个 int 的查询。我做错了什么,有没有更好的方法来查询数据库并将值返回给模型?

【问题讨论】:

  • komitentService.vratiBroj() 是否返回 Long?如果是这样:int a = komitentService.vratiBroj().intValue();
  • 不,我到处都返回 int 。在我的 KomitentService 中是 public int vratiBroj(); 而在我的 KomitentServiceImpl 中是 @Override @Transactional public int vratiBroj() { return komitentDAO.vratiBroj(); }

标签: java spring hibernate


【解决方案1】:

count(*) 确实返回 Long 而不是 Integer。

所以你的方法应该是这样的:

public int vratiBroj() {
    Session currentSession = sessionFactory.getCurrentSession();
    Query query = currentSession.createQuery("SELECT count(*) from Komitent"); 
    long num = (Long) query.getSingleResult();
    return num.intValue();
}

【讨论】:

  • 我很乐意为您提供帮助。如果您能接受我的回答,我将不胜感激。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2020-10-11
  • 2016-07-26
  • 2013-08-24
  • 2015-05-29
相关资源
最近更新 更多