すでにこの質問をしたことは知っていますが、まだ誤解があります。私の前の質問: Liferay とその中の関係
一言で言えば、書籍の追加/更新/削除と著者の追加ができるポートレットがあります。さらに、本を追加しようとすると、既存の著者を選択できます。
http://i.stack.imgur.com/vzUjn.png
次に、各著者が何冊の本を書いたかを「著者」テーブルに表示する必要があります。
私のservice.xml:
<entity name="Book" local-service="true" remote-service="true" cache-enabled="false">
<column name="bookId" type="long" primary="true" />
<column name="bookName" type="String" />
<column name="bookDescription" type="String" />
<column name="authors" type="Collection" entity="Author" mapping-table="Books_Authors" />
<finder return-type="Collection" name="bookName">
<finder-column name="bookName"></finder-column>
</finder>
</entity>
<entity name="Author" local-service="true" remote-service="true" cache-enabled="false">
<column name="authorId" type="long" primary="true" />
<column name="authorName" type="String" />
<column name="books" type="Collection" entity="Book" mapping-table="Books_Authors" />
</entity>
目標を達成するには、どのファインダーを作成する必要がありますか? bookName finder を作成すると、持っている本の数を数えることができます。authorName finder を作成すると、作成者の数を数えることができます。私は少し迷っています。
ご協力ありがとうございます。まだいくつか質問があります。
- どのように、どこで入手でき
authorName
ますauthorId
か? count
のテーブルで変数を使用するにはどうすればよいview.jsp
ですか?long count = BookLocalServiceUtil.countByAuthor(authorId);
public void addBook(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
String bookName = ParamUtil.getString(actionRequest,"bookName");
String bookDescription = ParamUtil.getString(actionRequest, "bookDescription");
Long authorId = ParamUtil.getLong(actionRequest, "author");
try {
Book book = BookLocalServiceUtil.createBook(CounterLocalServiceUtil.increment());
book.setBookName(bookName);
book.setBookDescription(bookDescription);
book.setAuthorId(authorId);
book=BookLocalServiceUtil.addBook(book);
String author = ParamUtil.getString(actionRequest, "authorId");
} catch (Exception e) {
log.info(ADD_BOOK_ERROR, e);
SessionErrors.add(actionRequest, "PortalExceptionError");
}
}