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)'
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.