以下是示例代码:
@Results(
id = "displayData", value = {
@Result(property = "Caller", column = "c.CALLER"),
@Result(property = "Event", column = "t.RECORD_TEXT"),
@Result(property = "Receiver", column = "c.RECEIVER"),
@Result(property = "Timestamp", column = "e.RECORD_DATE")
}
)
@Select("SELECT c.CALLER, c.RECEIVER, e.RECORD_DATE, t.RECORD_TEXT FROM T_CALL c " +
"INNER JOIN T_EVENT e ON e.CALL_ID=c.RECORD_ID INNER JOIN T_EVENT_TYPE t " +
"ON e.RECORD_EVENT_ID=t.RECORD_ID WHERE c.CALLER LIKE '%${searchTerm}%' OR " +
"t.RECORD_TEXT LIKE '%${searchTerm}%' OR c.RECEIVER LIKE '%${searchTerm}%' " +
"ORDER BY ${ordering} LIMIT ${limit} OFFSET ${offset}")
List<DisplayData> findAndSortDataToDisplay(@Param("searchTerm") String searchTerm, @Param("ordering") String ordering,
@Param("limit") int limit, @Param("offset") int offset);
问题是“Event”和“Timestamp”在运行时设置为NULL(其他两个设置正确)! 任何人都可以帮忙解决一些如何解决这个问题的建议吗?
(整个代码可在此处获取:https://github.com/arthurmarkus2013/SampleWebsite)
编辑:
我不是百分百肯定,但似乎这段代码确实有效:
@Select("SELECT c.CALLER, e.EVENTS_GROUP_ID FROM T_CALL c INNER JOIN T_EVENT e " +
"ON e.CALL_ID=c.RECORD_ID WHERE c.CALLER = ${callerId}")
int fetchEventsGroupId(@Param("callerId") int callerId);
不同之处在于,此定义仅包含一个JOIN子句,而第一个包含其中两个。换句话说,我非常肯定,问题是由那些JOIN引起的!
但问题是,我提供了绝对要求,两个定义都按预期工作!
答案 0 :(得分:0)
为了帮助您,我需要有关DisplayData类型的更多详细信息。 如果Event和Timestamp与T_CALL具有一对多/一对一的关系,则需要阅读有关关联和集合的内容。 参考Mybatis Docs
使用注释,请参阅@Many @one Mybatis annotations
我希望这可以帮到你,祝你好运!