Search code examples
javaspringcontrollerentitylombok

why lombok doesnt create construct with args


Why lombok doesnt not crate constructor with args

package ua.models;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(name = "booking")
public class Booking {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "booking_id")
    private Long id;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Temporal(TemporalType.DATE)
    @Column(name = "start_date")
    private Date startDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Temporal(TemporalType.DATE)
    @Column(name = "end_date")
    private Date endDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Temporal(TemporalType.DATE)
    @Column(name = "booking_date")
    private Date bookingDate;

    @Column(name = "surname")
    private String surname;

    @Column(name = "passport")
    private String passport;

    @Column(name = "price")
    private BigDecimal price;

    @ManyToOne
    @JoinColumn(name = "r_id", nullable = false)
    private Room room;

    @ManyToOne
    @JoinColumn(name = "u_id", nullable = false)
    private User user;

    @Column(name = "name")
    private String name;

    @ManyToOne
    @JoinColumn(name = "payment_id")
    private Payment payment;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "status_id")
    private Status status;


    @Override
    public String toString() {
        return "Booking{" +
                "id=" + id +
                ", startDate=" + startDate +
                ", endDate=" + endDate +
                ", bookingDate=" + bookingDate +
                ", surname='" + surname + '\'' +
                ", passport='" + passport + '\'' +
                ", price=" + price +
                ", room=" + room +
                ", user=" + user +
                ", name='" + name + '\'' +
                ", payment=" + payment +
                ", status=" + status +
                '}';
    }
}
package ua.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.query.Param;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import ua.forms.BookingForm;
import ua.models.*;
import ua.service.*;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Date;
import java.util.concurrent.TimeUnit;

@Controller
public class BookingController {
    private final BookingService bookingService;

    private final RoomService roomService;

    private final UserService userService;

    private final StatusService statusService;


    private final HotelService hotelService;

    private final PaymentService paymentService;

    @Autowired
    public BookingController(BookingService bookingService, RoomService roomService, UserService userService,
                             StatusService statusService, HotelService hotelService,
                             PaymentService paymentService) {
        this.bookingService = bookingService;
        this.roomService = roomService;
        this.userService = userService;
        this.statusService = statusService;
        this.hotelService = hotelService;
        this.paymentService = paymentService;
    }

    @GetMapping("/booking/{name}")
    String showBookingPage(@PathVariable String name, @Param("endDate")String endDate,
                              @Param("startDate")String startDate, @Param("number") int number, Model model){
        BookingForm bookingForm = new BookingForm();
        Hotel hotel = hotelService.findHotelByName(name);
        Room room = roomService.findRoomByNumberAndHotel(number,hotel);
        System.out.println(name);
        model.addAttribute("bookingForm",bookingForm);
        model.addAttribute("endDate",endDate);
        model.addAttribute("startDate",startDate);
        model.addAttribute("number", number);
        model.addAttribute("room",room);
        model.addAttribute("hotel",hotel);
        return "booking";
    }

    @PostMapping("/booking/{name}")
    String addBooking(@PathVariable String name, @Param("endDate")String endDate,
                      @Param("startDate")String startDate,
                      @Param("number") int number, Model model,
                      BookingForm bookingForm) throws ParseException {

        User user = userService.findUserByUsername(SecurityContextHolder.getContext().getAuthentication().getName());
        Status status = statusService.findStatusByName("Обрабатывается");
        Hotel hotel = hotelService.findHotelByName(name);


        Room room = roomService.findRoomByNumberAndHotel(number,hotel);
        Payment payment = paymentService.findPaymentByName(bookingForm.getPaymentName());

        long duration  = format.parse(endDate).getTime() - format.parse(startDate).getTime();
        BigDecimal diffInDays = BigDecimal.valueOf(TimeUnit.MILLISECONDS.toDays(duration)).multiply(room.getPrice());


        Date todayDate = format.parse(LocalDate.now().toString());

        bookingService.save(new Booking(format.parse(startDate),format.parse(endDate),todayDate,
                bookingForm.getSurname(),bookingForm.getPasswordNumber(),diffInDays
                ,room,user,bookingForm.getName(),payment,status));

        return "redirect:/hotels";
    }
}

(BookingController (87)) Cannot resolve constructor 'Booking(java.util.Date, java.util.Date, java.util.Date, java.lang.String, java.lang.String, java.math.BigDecimal, ua.models.Room, ua.models.User, java.lang.String, ua.models.Payment, ua.models.Status)'


Solution

  • As per Lombok documentation (https://projectlombok.org/api/lombok/AllArgsConstructor.html):

    An all-args constructor requires one argument for every field in the class.

    Obviously you haven't provided id as a constructor argument.