Liferay Service Builder 6.2:多对一关系

Liferay Service Builder 6.2:多对一关系,liferay,liferay-6,liferay-service-builder,Liferay,Liferay 6,Liferay Service Builder,我想创建一对多关系,我使用了以下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="Cours

我想创建一对多关系,我使用了以下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()


我做错了什么?

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

首先,我们要求ServiceBuilder在
学生
课程
之间创建一个映射表

<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>
要从
Student
对象中获取
Courses
,我们在生成的
StudentImpl.java
中创建方法:

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

List courses=student.getCourses();

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

请先参考以下内容:

对于自发添加以下代码

<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>


运行构建服务,成功执行后,您将看到getter setter方法。

好的,这是可行的。但是它给课程表留下了不需要的数据库列(studentId),对吗?在您上面提供的Service Builder XML中,
studentId
已经是
course
表的一列。好的,对;)那是我的错误。有办法摆脱它吗?只有列表的getter?还有,第二个问题:没有办法从学生元素中获取这些元素吗?如果我没有错的话,你的答案显示的是多对多关系,而不是OP所问的一对多关系。
List<Course> courses = CourseLocalServiceUtil.getStudentCourses(studentId);
List<Course> courses = student.getCourses();
<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>