Liferay Service Builder 6.2:多对一关系
我想创建一对多关系,我使用了以下service.xml: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
<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>