ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-SpringBoot JPA接口的save()和delete()无法与ArrayList或Long一起使用

2019-11-09 05:02:56  阅读:702  来源: 互联网

标签:spring-boot spring-data-jpa interface java spring-mvc


我正在关注使用SpringBoot 1.3的教程.我正在使用SpringBoot 2.0的最新版本.我正在创建REST API.我需要帮助使1.3代码适应2.0的要求,因为save()和delete()现在期望对象具有长id.我该如何重写接口以接受长ID’和’ArrayList?

现在的代码如下:

基础对象

@Entity
public class HotelBooking {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id; // could be Long

private String hotelName;
private double pricePerNight;
private int nbOfNights;

public HotelBooking(){} 

public HotelBooking(String hotelName, double pricePerNight, int nbOfNights) {
    this.hotelName = hotelName;
    this.pricePerNight = pricePerNight;
    this.nbOfNights = nbOfNights;
}
// getters omitted
}

介面

@Repository
public interface BookingRepository extends JpaRepository<HotelBooking, Long> {
data/jpa/docs/2.1.0.M1/reference/html/
    List<HotelBooking> findByPricePerNightLessThan(double price);
}

使用长ID删除数据库中的条目

@RequestMapping(value = "/delete/id")
public List<HotelBooking> remove(@PathVariable long id) {
    bookingRepository.delete(id);
    return bookingRepository.findAll();
}

尝试将ArrayList对象保存到数据库

 @Override
    public void run(String... strings) throws Exception {

        List<HotelBooking> bookings = new ArrayList<>();

        bookings.add(new HotelBooking("Marrior", 200.50, 3));
        bookings.add(new HotelBooking("Ibis", 90, 4));
        bookings.add(new HotelBooking("Novotel", 140.74, 1));

        bookingRepository.save(bookings);
    }

问题

以上内容在SpringBoot 2.0中不再起作用.尝试通过ID删除时,出现错误消息-错误:(61,34)java:不兼容的类型:long无法转换为romaniancoder.booking.HotelBooking
现在期望在数据库中找到对象而不是长id.

尝试保存ArrayList时出现此错误-错误:(40,26)java:接口org.springframework.data.repository.CrudRepository< T,ID>中保存的方法.不能应用于给定类型;
  要求:S
  找到:java.util.List< romaniancoder.booking.HotelBooking>
  原因:推断的类型不符合上限
    推断:java.util.List< romaniancoder.booking.HotelBooking>
    上限:romaniancoder.booking.HotelBooking
好像需要扩展某个类或进行某些工作吗?我不确定…

阅读了Spring Docs之后,我不明白为什么会更改,以及如何编写代码以接受长id以便在数据库中查找内容.我不明白如何使s​​ave()接受ArrayLists.

解决方法:

您可以使用repository.deleteById(Long)和repository.saveAll(ArrayList).这些方法在SpringBoot 2.0中引入.

标签:spring-boot,spring-data-jpa,interface,java,spring-mvc
来源: https://codeday.me/bug/20191109/2011906.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有