我正在使用 MyBatis 访问数据库。
为此,我开设了以下课程:
class ClassA {
private int id;
private List<ClassB> list;
// public getters and setters
}
class ClassB {
private int id;
// public getters and setters
}
相应的 DAO 如下所示:
public interface ClassADAO {
@Select("SELECT id, name, description FROM TableA WHERE id = #{id}")
@Results(
@Result(property = "list", javaType = List.class, column = "id",
many = @Many(select = "ClassBDao.getClassBForClassA")))
ClassA getClassAById(@Param("id") long id);
}
public interface ClassBDAO {
@Select("SELECT id, classAId FROM TableB WHERE classAId = #{id}")
ClassB getClassBForClassA(@Param("id") long id);
}
不幸的是 id 列ClassA
未填写正确的 id。
看来这是因为它被用作映射列。
有人已经遇到过这个问题或有解决方案吗?据我所知,即使重命名列也无济于事,因为它仍然是映射列,因此不会设置该值。
我能够在 mybatis 代码中找到它,我认为:org.apache.ibatis.executor.resultset.DefaultResultSetHandler#applyAutomaticMappings()
仅对未映射的列应用映射。
我为所有将来可能遇到同样问题的人找到了解决方案。
奇怪的是,您必须指定 id 列作为附加结果(因为它已映射):
public interface ClassADAO {
@Select("SELECT id, name, description FROM TableA WHERE id = #{id}")
@Results({@Result(property = "id", column = "id"),
@Result(property = "list", javaType = List.class, column = "id",
many = @Many(select = "ClassBDao.getClassBForClassA"))})
ClassA getClassAById(@Param("id") long id);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)