Author と Book の 2 つのクラスがあり、両方の関係が定義されていて、適切な 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 は空白です。