8

我想创建一个一对多的关系,我使用了以下 service.xml:

<entity name="Student" local-service="true" remote-service="true" cache-enabled="false">
    <column name="studentId" type="long" primary="true" />
    <column name="courses" type="Collection" entity="Course"/>
</entity>

<entity name="Course" local-service="true" remote-service="true" cache-enabled="false">
    <column name="courseId" type="long" primary="true" />
    <column name="studentId" type="long"/>
</entity>

我的问题是没有为 collections 方法创建任何内容。没有例外,没有。生成了类,并且有简单的 getter 方法,但没有 getCourse()。

我做错了什么?

4

2 回答 2

9

getter 不会自动为您创建。每个实体都代表数据库中的一个表,因此您必须创建任何您认为有用的 getter。幸运的是,如果您需要,Service Builder 也能够生成它。

首先,我们要求 Service Builder 创建 和 之间的映射StudentsCourses

<entity name="Student" local-service="true" remote-service="true" cache-enabled="false">
    <column name="studentId" type="long" primary="true" />

    <column name="courses" type="Collection" entity="Course" mapping-table="Courses_Students" />
</entity>

<entity name="Course" local-service="true" remote-service="true" cache-enabled="false">
    <column name="courseId" type="long" primary="true" />

    <column name="students" type="Collection" entity="Student" mapping-table="Courses_Students" />
</entity>

接下来,我们在 中创建适当的方法CourseLocalServiceImpl

public List<Course> getStudentCourses(long studentId)
    throws PortalException, SystemException {

    return coursePersistence.getCourses(studentId);
}

要从对象中获取CoursesStudent我们在 generated 中创建方法StudentImpl.java

public List<Course> getCourses() throws Exceptions {
    return CorseLocalServiceUtil.getStudentCourses(getStudentId());
}

最后,通过运行重新生成您的类ant build-service

现在我们可以通过以下方式获取学生正在学习的所有课程:

List<Course> courses = CourseLocalServiceUtil.getStudentCourses(studentId);

或者

List<Course> courses = student.getCourses();
于 2014-06-17T22:48:48.777 回答
6

Liferay 在其所有版本中都有指定的文档,这有助于从上到下的方法。

请先参考这个:

https://www.liferay.com/documentation/liferay-portal/6.2/development/-/ai/define-your-object-relational-map-liferay-portal-6-2-dev-guide-04-en

对于自发添加以下代码

<entity name="Student" local-service="true" remote-service="true" cache-enabled="false">
    <column name="studentId" type="long" primary="true" />
    <column name="courses" type="Collection" entity="Course"/>
</entity>

<entity name="Course" local-service="true" remote-service="true" cache-enabled="false">
    <column name="courseId" type="long" primary="true" />
    <column name="studentId" type="long"/>

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

    <finder name="studentId" return-type="Collection">
        <finder-column name="studentId" />
    </finder>
</entity>

运行 build-service 并成功执行后,您将看到 getter setter 方法。

于 2014-06-18T05:06:10.847 回答