作者:w果乐园地盘BSp | 来源:互联网 | 2023-06-08 13:00
我有两个实体:书和作者。这是多对多的关系。我想得到带有作者所有书籍的所有表格的表格,并在Spring Application中使用Thymeleaf将它们显示到表格中。
这里的图书课:
@Entity
@Table(name="book",schema="booksloan")
public class Book{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String title;
private String year;
@ManyToMany(fetch = FetchType.LAZY,cascade = {
CascadeType.PERSIST,CascadeType.MERGE
},mappedBy = "book")
private Set author = new HashSet<>();
public Book() {
}
// getters and setters
}
这里是作者课程:
@Entity
@Table(name="Author",schema="booksloan")
public class Author{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id_author;
private String name;
private String surname;
@ManyToMany
@JoinTable(
name = "written",joinColumns = @JoinColumn(name = "id_author"),inverseJoinColumns = @JoinColumn(name = "id"))
private Set books = new HashSet<>();
public Author() {
}
// getters and setters
}
我不知道该书面课程是否有用
@Entity
public class Written{
private int id;
private int id_author;
public Written() {
}
// getters and setters
}
在这里BookRepository界面
@Repository
public interface BookRepository extends JpaRepository {
@Query(value = "SELECT * FROM Written s JOIN Book l on s.id = l.id JOIN Author a on a.id_author = s.id_author",nativeQuery = true)
public List findWrittenBy();
}
在AppController类中
@RequestMapping(value={"","/","/index"})
public String index(Model model) {
List listBooksTest = bookService.findWrittenBy();
model.addAttribute("listBooksTest",listBooksTest);
return "indexUser";
}
}
这里是indexUser
xmlns:th="http://www.thymeleaf.org">
Books list
ID Book |
ID Author |
Title |
Year |
Name Author |
Surname Author |
actions |
---|
ID Book |
ID Author |
Title |
Year |
Name Author |
Surname Author |
View copy |
这是我得到的错误
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'id_author' cannot be found on object of type 'net.assignment.booksLoan.model.Book' - maybe not public or not valid?
有人知道我该怎么做吗?
您知道而不是浪费时间(我们讨厌浪费时间,不是我们)弄清楚哪些查询适合实体的哪一侧,您可以将结果列合并到定制模型/类中。或以类似的方式,只需在同一控制器中合并List
和List
的相交行并将它们传递给视图。
理想情况下,您的查询将是
@Query(value = "w.id,w.id_author,b.id,b.title,b.year,a.id_author,a.name,a.surname
FROM Book b
INNER JOIN
Written w on b.id = w.id
INNER JOIN
Author a on w.id_author = a.id_author ",nativeQuery = true)
public List findAllIntersectedColumn ();
问题是您列表的签名是 Book ,您还希望同时获得name
和surename
,但Book中没有明确定义它们尽管它们通过 M-to-M 模型彼此关联,但它们仍然是一个字段。还有一个关于projection interface的主题,用于检索可以在spring的doc上阅读的相关属性的子集。