Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mybatis一对多集合映射始终具有一个默认实体_Java_Sql_Spring_Mybatis - Fatal编程技术网

Java Mybatis一对多集合映射始终具有一个默认实体

Java Mybatis一对多集合映射始终具有一个默认实体,java,sql,spring,mybatis,Java,Sql,Spring,Mybatis,我想重写我们的服务,以使用mybatis映射和联接,使我们的实体在数据库/mybatis层上完整和完成 <resultMap id="ParentMap" type="org.example.mybatis.Parent"> <id column="id" jdbcType="VARCHAR" property="id" /> <id column="Name" jdbcType="VARCHAR" property="name" />

我想重写我们的服务,以使用mybatis映射和联接,使我们的实体在数据库/mybatis层上完整和完成

<resultMap id="ParentMap" type="org.example.mybatis.Parent">
    <id column="id" jdbcType="VARCHAR" property="id" />
    <id column="Name" jdbcType="VARCHAR" property="name" />
    <id column="SurName" jdbcType="VARCHAR" property="surName" />

    <collection property="childs" column="ChildId"
        javaType="ArrayList" ofType="org.example.mybatis.Child"
        resultMap="org.example.ChildMap" />    
</resultMap>

<resultMap id="ChildMap" type="org.example.mybatis.Parent">

    <id column="id" jdbcType="VARCHAR" property="id" />
    <id column="Name" jdbcType="VARCHAR" property="name" />
    <id column="SurName" jdbcType="VARCHAR" property="surName" />
    <id column="Age" jdbcType="INTEGER" property="age" />
</resultMap>

<sql id="Parent_Column_List">
    p.Id, p.Name, p.SurName,
</sql>  

<sql id="Child_Column_List">
    c.Id, c.ParentId c.Name, c.SurName, c.Age
</sql>  

<select id="getParent" parameterType="java.lang.String" resultMap="ParentMap" >
    select 
    <include refid="Parent_Column_List"/>

    <include refid="Child_Column_List" />
    from Parent p

    left outer join Child c on p.Id = c.ParentId
    where p.id = #{id,jdbcType=VARCHAR}
接下来的问题是:若父项并没有子项,那个么一些带有null或默认字段的默认实体将添加到列表中。 我知道这是外部连接的本质,但mybatis不是很聪明地理解这是假的吗


有什么解决办法吗?我无法使用内部联接,因为父实体必须在结果中。

必须将属性notNullColumn放入集合中。因此,您的结果图将是:

<resultMap id="ParentMap" type="org.example.mybatis.Parent">
    <id column="id" jdbcType="VARCHAR" property="id" />
    <id column="Name" jdbcType="VARCHAR" property="name" />
    <id column="SurName" jdbcType="VARCHAR" property="surName" />

    <collection property="childs" column="ChildId" notNullColumn="id"
        javaType="ArrayList" ofType="org.example.mybatis.Child"
        resultMap="org.example.ChildMap" />    
</resultMap>

请注意,这两个id也可能有问题,因此您可能需要在选择中使用一个c.id作为ChildId。默认情况下,这应该可以工作。无需添加NotNull列

默认情况下,MyBatis检测空对象

我刚刚在项目中加入了这个测试,请看一下


谢谢。用户指南中没有记录此属性。您的问题去年被报告为错误。如果你好奇的话,我会给你这个链接。这里的问题是ParentMap和ChildMap都有一个id列。即使外部联接没有任何记录,它仍将创建具有任何匹配列的子对象。当映射共享相同的列时,notNullColumn是告诉MyBatis对象应为null的正确方法,除非notNullColumn不为null。@Nathanial您省去了我一天编写单独映射器的工作。。。干杯