0

我有一个 portlet,可以添加/更新/删除书籍和添加作者。此外,您可以在尝试添加书籍时选择现有作者。

在此处输入图像描述

现在我需要在“作者”表中显示每个作者写了多少本书。我该怎么做?我是liferay的新手,我什至不知道。

这是我的 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>
4

1 回答 1

3

服务生成器是您的朋友。

您只需要在您的图书实体中添加一个查找器service.xml。如果您的实体有一个名为 的字段author

<finder name="Author" return-type="Collection">
    <finder-column name="author" />
</finder>

build-service 的执行将生成方法BookUtil.findByAuthor()BookUtil.countByAuthor().

您现在可以在 中实现相应的方法BookLocalServiceImpl,调用之前的方法,并且在再次运行构建服务之后,它们在您的Util类中可用。就像是

public List<Book> getByAuthor(String author) {
    return getPersistence().findByAuthor(author);
}

public int countByAuthor(String author) {
    return getPersistence().countByAuthor(author);
}

在最后一次调用 build-service 之后,您可以从BookLocalServiceUtil.

如果您只想要计数,请不要检索所有集合。如果有很多记录,这是一个坏主意。改为调用计数。

于 2016-09-05T15:08:59.493 回答