I'm trying to retrieve a Date format field in a MongoDB collection from a Spring Boot Application. In the Repository I've written the native MongoDB query for the method. When I run the application, I get the errors like:
**org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bookingHistoryController': Unsatisfied dependency expressed through field 'bookingHistoryService': Error creating bean with name 'bookingHistoryService': Unsatisfied dependency expressed through field 'bookingHistoryRepo': Error
creating bean with name 'bookingHistoryRepo' defined in
hotelbookingsystem.repositories.BookingHistoryRepo defined in
@EnableMongoRepositories declared on
MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration:
Could not create query for public abstract java.util.List
otelbookingsystem.repositories.BookingHistoryRepo.findCheckinByCustomerId(java.lang.Integer); Reason: Unable to make private
java.time.LocalDateTime(java.time.LocalDate,java.time.LocalTime)
accessible: module java.base does not "opens java.time" to
unnamed module @77523395**
And,
**Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make private java.time.LocalDateTime(java.time.LocalDate,java.time.LocalTime) accessible: module java.base does not "opens java.time" to unnamed module @77523395**
I understand that the issue has something to do with --add-opens java.base/java.time=ALL-UNNAMED
but guide me a better way to implement this in IntelliJ.
Java class for the 'bookinghistories' collection in MongoDB.
package hotelbookingsystem.documents;
import java.time.LocalDateTime;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.format.annotation.DateTimeFormat;
@Document(collection = "bookinghistories")
public class BookingHistory {
@Id
@Field(name = "_id")
private String id;
@Field(name = "customer_id")
private Integer customerId;
@Field(name = "room_number")
private Integer roomNumber;
@Field(name = "checkin_date")
private LocalDateTime checkinDate;
@Field(name = "checkout_date")
private LocalDateTime checkoutDate;
@Field(name = "days_of_stay")
private Integer daysOfStay;
public BookingHistory(String id, Integer customerId, Integer roomNumber, LocalDateTime checkinDate,
LocalDateTime checkoutDate, Integer daysOfStay) {
super();
this.id = id;
this.customerId = customerId;
this.roomNumber = roomNumber;
this.checkinDate = checkinDate;
this.checkoutDate = checkoutDate;
this.daysOfStay = daysOfStay;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getCustomerId() {
return customerId;
}
public void setCustomerId(Integer customerId) {
this.customerId = customerId;
}
public Integer getRoomNumber() {
return roomNumber;
}
public void setRoomNumber(Integer roomNumber) {
this.roomNumber = roomNumber;
}
public LocalDateTime getCheckinDate() {
return checkinDate;
}
public void setCheckinDate(LocalDateTime checkinDate) {
this.checkinDate = checkinDate;
}
public LocalDateTime getCheckoutDate() {
return checkoutDate;
}
public void setCheckoutDate(LocalDateTime checkoutDate) {
this.checkoutDate = checkoutDate;
}
public Integer getDaysOfStay() {
return daysOfStay;
}
public void setDaysOfStay(Integer daysOfStay) {
this.daysOfStay = daysOfStay;
}
}
The Repository:
package hotelbookingsystem.repositories;
import hotelbookingsystem.documents.BookingHistory;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.time.LocalDateTime;
import java.util.List;
public interface BookingHistoryRepo extends MongoRepository<BookingHistory, Integer> {
@Query(value = "{customer_id : ?0}", fields = "{_id: 0, checkin_date: 1}")
List<LocalDateTime> findCheckinByCustomerId(Integer customerId);
}
The program is expected to retrieve the list of LocalDateTime Objects for the 'checkin_date' field in MongoDB for the given 'customer_id'.
This is how the collection looks: Screenshot from MongoDB Compass of the collection