Mybatis un-à-plusieurs une collection toujours d'avoir une entité par défaut
Je veux réécrire nos services pour utiliser mybatis cartographie et se joint à notre entité pleine et complété sur la base de données/mybatis couche.
<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}
Problème est le suivant: si le parent n'a pas d'enfant, certains d'entité par défaut avec la valeur null ou de champs par défaut sera ajoutée à la liste.
Je comprends que c'est la nature de la jointure externe, mais mybatis est pas très intelligent pour comprendre que c'est faux?
Est-il une solution de contournement à ce sujet? Je ne peux pas utiliser une jointure interne depuis entité mère est nécessaire pour être en résultat.
OriginalL'auteur Shikarn-O | 2012-10-24
Vous devez vous connecter pour publier un commentaire.
Vous devez mettre l'attribut
notNullColumn
dans votre collection. Si votre resultMap sera:Notez que vous aurez également peut-être avoir des problèmes avec les deux
id
, de sorte que vous aurez peut-être avoir unc.id as ChildId
dans votre sélectionnezVotre "problème" a été signalé comme une bogue de l'an dernier. Je vous laisse le lien au cas où vous êtes curieux. goo.gl/TXfr2
OriginalL'auteur cporte
Cela devrait fonctionner par défaut. Il n'est pas nécessaire d'ajouter de la
notNullColumn
.MyBatis
détecte des objets vides par défaut.J'ai juste compris ce test dans le projet, veuillez jeter un oeil.
Code
notNullColumn
est la façon correcte de le direMyBatis
l'objet doit être nul à moins que lenotNullColumn
n'est pas nulle.vous m'avez sauvé un jour l'effort de l'écriture séparée mappeurs ... cheers
OriginalL'auteur emacarron