MyBatis数据查询问题

时间:2016-08-25 13:49:43

标签: sql h2 mybatis spring-mybatis

以下是示例代码:

@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引起的!
但问题是,我提供了绝对要求,两个定义都按预期工作!

1 个答案:

答案 0 :(得分:0)

为了帮助您,我需要有关DisplayData类型的更多详细信息。 如果Event和Timestamp与T_CALL具有一对多/一对一的关系,则需要阅读有关关联和集合的内容。 参考Mybatis Docs

使用注释,请参阅@Many @one Mybatis annotations

我希望这可以帮到你,祝你好运!