There are two tables Books and Users. They are connected by a many-to-many relationship and have a crosstab between them with columns book_id, reader_id, start date, and end date. I need to take data from this table as User.login, Books.title, start_date and end_date. How can I get data from this table if I have the following entities:
Book Entity:
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
@Column(name = "publishing_year")
private Integer publishingYear;
@Column(name = "sell_cost")
private BigDecimal sellCost;
@Column(name = "rent_cost")
private BigDecimal rentCost;
@Column(name = "amount")
private Integer amount;
//=======Relationships=======
@ManyToMany(cascade = {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.REMOVE})
@JoinTable(name = "rented_books",
joinColumns = @JoinColumn(name = "book_id"),
inverseJoinColumns = @JoinColumn(name = "reader_id"))
private List<User> usersRented;
}
User Entity:
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "username")
private String login;
@Column(name = "password")
private String password;
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
@Column(name = "wallet")
private Integer wallet;
@Column(name = "enabled")
private boolean enabled;
//=======Relationships=======
@ManyToMany(mappedBy = "usersRented")
private List<Book> rentedBooks;
Book Repository
@Repository
public interface BookRepository extends CrudRepository<Book,Long> {
@Query(value = "SELECT b.title,rb.start_date,rb.expiration_date FROM books b INNER JOIN rented_books rb ON rb.book_id = b.id INNER JOIN users u ON u.id = rb.reader_id WHERE u.id = ?1",nativeQuery = true)
Page<Book> findAllRentedBookByUser(Long id, Pageable pageable);
}
But this query doesn't work, throws this error:
java.sql.SQLException: Column 'id' not found.
Although in DBMS this query works fine