我有两个类:Author 和 Book,定义了两者之间的关系,正确的 JPA 注释。我在 Play Framework 中使用 MVC 架构。在控制器类(应用程序)ORM 工作中,我有关于作者(idA 和 nameA)的完整信息,但在视图中,字段 nameA 看起来像空字符串(idA 是正确的)。
下面我将解释我的意思:
在作者:
public class Autor extends Model {
@Id
public Long idA;
@Required
public String nameA;
@ManyToMany(mappedBy = "authors")
public Set<Book> books;
}
在书籍中:
public class Book extends Model {
@Id
public Long idB
@ManyToMany
@JoinTable(
name = "creates",
joinColumns = @JoinColumn(name = "id_b", referencedColumnName = "id_b"),
inverseJoinColumns = @JoinColumn(name = "id_a", referencedColumnName = "id_a")
)
public Set<Autor> authors;
}
public static Finder<Long, Book> find = new Finder<Long, Book>(Long.class, Book.class);
public static List<Book> all()
{
return find.all();
}
作为 GET 请求的效果,我试图与所有作者一起获得书籍。我已添加到路由文件行:
GET /books/ controllers.Application.booksShow()
并在 Application 类中创建了方法:
public static Result booksShow(Long)
{
return ok(views.html.booksInfo.render(Book.all()));
}
Scala 中的视图片段如下所示:
@for(book <- Books) {
<li>
@book.title
@book.authors.size()
@for(author <- book.authors) {
<li>@author.nameA</li>
}
</li>
}
在浏览器中获取请求后,我得到如下信息:
Title1 2
[empty line]
[empty line]
Title2 1
[empty line]
但应该是:
Title1 2
Author1
Author2
Title2 1
Author2
我试图将 booksShow 方法更改为:
public static Result booksShow(Long id)
{
List<Books> b = Books.all();
System.out.println(b.get(0).title);
System.out.println(b.get(0).authors.iterator().next().nameA);
return ok(views.html.booksInfo.render(Ksiazka.all()));
}
在我的控制台中出现了:
Title1
Author1
但是在网站上,作者仍然是空的;
当我在 Scala 中进行更改时:
@for(author <- book.authors) {
<li>@author.nameA</li>
}
为了:
@for(author <- book.authors) {
<li>@author.idA</li>
}
我得到正确的(非零,非空白)ID。
任何的想法?我很困惑,我得到了 idA 和 Authors 集合的大小,但 nameA 是空白的。