gpt4 book ai didi

java - MyBatis - 一对多 - 未为映射列设置值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:41 25 4
gpt4 key购买 nike

我正在使用 MyBatis 访问数据库。为此,我有以下类(class):

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

}

不幸的是,ClassA 的 id 列没有填入正确的 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);

}

关于java - MyBatis - 一对多 - 未为映射列设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com