gpt4 book ai didi

java - 为什么 MyBatis 返回空对象的集合?

转载 作者:行者123 更新时间:2023-11-30 07:54:09 26 4
gpt4 key购买 nike

我有以下基本模型:

public class Sandbox {
private String firstName;
private Integer age;
private List<Split> split;
}

public class Split {
private Integer sandboxId;
}

我的SandboxMapper配置如下:

<resultMap id="SandboxMap" type="Sandbox">
<id property="firstName" column="FIRSTNAME"/>
<result property="age" column="AGE"/>
<collection property="split" javaType="list" ofType="Split" column="AGE" select="selectSplit">
<id property="sandboxId" column="SANDBOX_ID"/>
</collection>
</resultMap>

<select id="selectSandbox" resultMap="SandboxMap">
SELECT * FROM SANDBOX
WHERE AGE=#{age}
</select>

<select id="selectSplit" parameterType="int" resultType="com.scibor.Split">
SELECT * FROM SPLIT
WHERE Split.SANDBOX_ID=#{age}
</select>

我的数据库中有一些条目,例如有一个年龄为 14 的沙箱,并且有一些 SANDBOX_ID 为 14 的拆分。对任何列都没有强加的约束,因为文档中没有指定我必须这样做,即这些都是简单的数据类型,NUMBERVARCHAR没有PRIMARY KEY的概念, NOT NULL等等

然后在我的代码中调用:

Sandbox sandbox = session.selectOne("Sandbox.selectSandbox", 14);

这将返回 SandboxName 的对象和Age字段已正确设置,但是与 splits 关联的数组它只是一个空数组。如果我要保证唯一性和变化collectionassociation ,这将是同样的事情,split只是 null

我已经盯着这个有一段时间了,我已经尝试了 column 的各种值。在collection标签,以及 selectSplit 的各种变体条目,但它们都不起作用,它们总是返回 split 的空值。更烦人的是,没有抛出任何异常,因此似乎生成的所有 SQL 查询实际上都是有效的(很可能最后一个 #{age} 本身就是 null )。

有人可以解释一下我如何检索 Sandbox 的实例吗?与 List<Split>使用 MyBatis 填充?该文档很有帮助,但我确实遵循了这些示例,但我仍然没有得到预期的结果。

最佳答案

事实证明,难点就在这一行:

<select id="selectSplit" parameterType="int" resultType="com.scibor.Split">

我认为理所当然的事情之一是 Split 中的属性名称与关联表的列名称不匹配。因此,我必须创建以下内容,而不是使用 resultType:

<resultMap id="SplitMap" type="Split">
<id column="SANDBOX_ID" property="sandboxId"/>
</resultMap>

这解决了问题。

关于java - 为什么 MyBatis 返回空对象的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32913197/

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