我有一个如下所示的结果图:
<resultMap id="myMap" type="myEntity">
<id property="id" column="ID" />
<result property="name" column="NAME" />
<collection property="places" ofType="MyPlace" >
<result property="placeName" column="PLACE_NAME" />
</collection>
<resultMap>
<select id="mySelectStatement" parameterType="MyQuery" resultMap="myMap">
....
</select>
在select语句的传入参数(MyQuery)中,我有一个标志,指示这些地方是应该加入,解决还是遗漏。使用<if test="myFlag" />
构建这一切都很有效。
现在,我遇到的唯一问题是:当标志指示应该解析地点但是没有与实体连接的地方时,结果集合是空的(到目前为止一直很好)。但是,当标志指示不应解析场所时,结果集合也是空的。
字段“地点”是否为空是不可判定的,因为根本没有地方或因为它们根本没有得到解决。我想要的是一些机制,将字段“places”设置为'null',而不是在决定是否应该解析这些地方的标志设置为false的情况下返回空集合。
编辑: 更多代码可以更好地理解示例
// MyEntity.java
public class MyEntity {
private int id;
private String name;
private List<MyPlace> places;
}
// MyQuery.java
public class MyQuery {
private boolean myFlag;
// getter & setter
}
// MyComponent.java
public class MyComponent {
private MyMapper myMapper;
public void findByQuery(MyQuery myQuery) {
List<MyEntity> myEntities = myMapper.mySelectStatement();
MyEntity firstEntity = myEntities.get(0);
List<Place> places = firstEntity.getPlaces();
if(places.isEmpty()) {
System.out.println("Hm I wonder why they are empty");
}
}
}
// MyMapper.java
public interface MyMapper {
List<MyEntity> mySelectStatement(MyQuery myQuery);
}
// MyMapper.xml
// result map from above
<select id="mySelectStatement" parameterType="MyQuery" resultMap="myMap">
SELECT * FROM MY_ENTITY
<if test="myFlag">
LEFT OUTER JOIN PLACES ON .....
</if>
</select>
还有一些澄清:这一切都在原则上有效。我唯一的问题是我无法区分空集合“地方”是空的,因为表中没有条目和空集合的地方是空的,因为它们不应该首先被解决
我目前的解决方案是在方法调用后检查MyComponent是否传入的查询是否将标志设置为false。如果是这种情况,则将“places”变量手动设置为null。