【问题标题】:Hibernate, repository.save - java.lang.NullPointerException: null - while Object exist休眠,repository.save - java.lang.NullPointerException: null - 当对象存在时
【发布时间】:2018-10-30 20:41:53
【问题描述】:

我编写此代码只是为了将新数据保存到 mySql db,创建类、存储库和主控制器,它实际上适用于一个类但不适用于这个类,感谢一些指针,因为我真的不明白为什么空指针:

代码: 主控制器:

    @GetMapping(path = "/addExchange") 
public @ResponseBody String addNewExchange (@RequestParam String exchange)
{
    //check1
    System.out.println("creating Exchange constructor");
    Exchange e = new Exchange(); 
    //check 2
    System.out.println("created exchange constructor, " + exchange);
    e.setE_name(exchange);
    //check 3
    System.out.println("Exhange name is, " + e.getE_name());
    //check 4
    System.out.println(e);
    exchangeRepository.save(e); 
    return "Saved Exchange";
}

Eclipse 控制台的输出错误: 我下面的检查显示对象是从映射中提取的: - 创建 Exchange 构造函数 - 创建交换构造函数,橙色 - 交易所名称是,orange - 交换 [idexchange=0, e_name=orange]

2018-05-21 15:59:43.528 错误 5118 --- [nio-8080-exec-4] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet]在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 java.lang.NullPointerException] 的根本原因

java.lang.NullPointerException: null 在 com.instantmoney.MoneyServices.MainController.addNewExchange(MainController.java:47) ~[classes/:na]

交换存储库:

public interface ExchangeRepository extends CrudRepository<Exchange, Long> {

}

交流课

    @Entity 
public class Exchange {

@Id
@GeneratedValue (strategy = GenerationType.AUTO)
private int idexchange; 

private String e_name;

public Exchange() {}

//getter 和 setter

卷曲

http://localhost:8080/moneyservice/addExchange?exchange=orange

【问题讨论】:

  • 我认为exchangeRepository 为空,您可以添加MainController 代码吗?
  • 由于我们看不到您的原始行号,请在您的代码中标记此行:MainController.java:47
  • @GetMapping(path = "/addExchange") public @ResponseBody String addNewExchange(@RequestParam String exchange) { //check1 System.out.println("创建Exchange构造函数");交易所 e = new Exchange(); //check 2 System.out.println("创建了exchange构造函数," + exchange); e.setE_name(交换); //check 3 System.out.println("交易所名称是," + e.getE_name()); //检查 4 System.out.println(e); exchangeRepository.save(e); return "已保存的交易所"; }
  • 请在 Repository 类中使​​用 @Repository 注解,然后将其自动装配到 Controller...它应该可以工作。
  • @Eihab 你可以编辑你的帖子添加代码,请不要在评论中添加代码...

标签: java mysql spring hibernate


【解决方案1】:

试试这个

@Controller
public class ExchangeController {    

   @RequestMapping(path = "/addExchange", method = RequestMethod.POST) 
   public @ResponseBody String addNewExchange (@RequestParam String exchange)
   {
    if (exchange != null ) {
       Exchange e = new Exchange(); 
       e.setE_name(exchange);
       exchangeRepository.save(e); 
       return "Saved Exchange";
    } else {
       return new BadRequestException("exchange name can not be null!");
    }
   }

   @Autowired
   public ExchangeController(ExchangeRepository exchangeRepository) {
       this.exchangeRepository = exchangeRepository;
   }

   private ExchangeRepository exchangeRepository;
}

【讨论】:

  • 我还利用了你的帮助 Devratna,添加 !=null 很有用,我添加了这段代码以避免空异常。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2018-01-11
  • 2015-04-27
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多