Skip to content

Commit 73d8691

Browse files
Fixed http://code.google.com/p/mybatis/issues/detail?id=34 when referencing a resultMap with notNullColumn.
1 parent dd377a8 commit 73d8691

File tree

13 files changed

+128
-29
lines changed

13 files changed

+128
-29
lines changed

src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ public ResultMap addResultMap(
124124
Class<?> type,
125125
String extend,
126126
Discriminator discriminator,
127-
String notNullColumn,
128127
List<ResultMapping> resultMappings) {
129128
id = applyCurrentNamespace(id);
130129
extend = applyCurrentNamespace(extend);
@@ -140,7 +139,6 @@ public ResultMap addResultMap(
140139
resultMappings.addAll(extendedResultMappings);
141140
}
142141
resultMapBuilder.discriminator(discriminator);
143-
resultMapBuilder.notNullColumns(parseMultipleColumnNames(notNullColumn));
144142
ResultMap resultMap = resultMapBuilder.build();
145143
configuration.addResultMap(resultMap);
146144
return resultMap;
@@ -154,6 +152,7 @@ public ResultMapping buildResultMapping(
154152
JdbcType jdbcType,
155153
String nestedSelect,
156154
String nestedResultMap,
155+
String notNullColumn,
157156
Class<? extends TypeHandler> typeHandler,
158157
List<ResultFlag> flags) {
159158
ResultMapping resultMapping = assembleResultMapping(
@@ -164,6 +163,7 @@ public ResultMapping buildResultMapping(
164163
jdbcType,
165164
nestedSelect,
166165
nestedResultMap,
166+
notNullColumn,
167167
typeHandler,
168168
flags);
169169
return resultMapping;
@@ -184,6 +184,7 @@ public Discriminator buildDiscriminator(
184184
jdbcType,
185185
null,
186186
null,
187+
null,
187188
typeHandler,
188189
new ArrayList<ResultFlag>());
189190
Map<String, String> namespaceDiscriminatorMap = new HashMap<String, String>();
@@ -318,6 +319,7 @@ private ResultMapping assembleResultMapping(
318319
JdbcType jdbcType,
319320
String nestedSelect,
320321
String nestedResultMap,
322+
String notNullColumn,
321323
Class<? extends TypeHandler> typeHandler,
322324
List<ResultFlag> flags) {
323325
// Class resultType = resultMapBuilder.type();
@@ -338,6 +340,7 @@ private ResultMapping assembleResultMapping(
338340
builder.typeHandler(typeHandlerInstance);
339341
builder.flags(flags == null ? new ArrayList<ResultFlag>() : flags);
340342
builder.composites(composites);
343+
builder.notNullColumns(parseMultipleColumnNames(notNullColumn));
341344

342345
return builder.build();
343346
}

src/main/java/org/apache/ibatis/builder/ResultMapResolver.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,20 @@ public class ResultMapResolver {
1212
private Class<?> type;
1313
private String extend;
1414
private Discriminator discriminator;
15-
private String notNullColumn;
1615
private List<ResultMapping> resultMappings;
1716

18-
public ResultMapResolver(MapperBuilderAssistant assistant, String id, Class<?> type, String extend, Discriminator discriminator, String notNullColumn,
17+
public ResultMapResolver(MapperBuilderAssistant assistant, String id, Class<?> type, String extend, Discriminator discriminator,
1918
List<ResultMapping> resultMappings) {
2019
this.assistant = assistant;
2120
this.id = id;
2221
this.type = type;
2322
this.extend = extend;
2423
this.discriminator = discriminator;
25-
this.notNullColumn = notNullColumn;
2624
this.resultMappings = resultMappings;
2725
}
2826

2927
public ResultMap resolve() {
30-
return assistant.addResultMap(this.id, this.type, this.extend, this.discriminator, this.notNullColumn, this.resultMappings);
28+
return assistant.addResultMap(this.id, this.type, this.extend, this.discriminator, this.resultMappings);
3129
}
3230

3331
}

src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private void applyResultMap(String resultMapId, Class<?> returnType, Arg[] args,
163163
applyConstructorArgs(args, returnType, resultMappings);
164164
applyResults(results, returnType, resultMappings);
165165
Discriminator disc = applyDiscriminator(resultMapId, returnType, discriminator);
166-
assistant.addResultMap(resultMapId, returnType, null, disc, null, resultMappings);
166+
assistant.addResultMap(resultMapId, returnType, null, disc, resultMappings);
167167
createDiscriminatorResultMaps(resultMapId, returnType, discriminator);
168168
}
169169

@@ -187,11 +187,12 @@ private void createDiscriminatorResultMaps(String resultMapId, Class<?> resultTy
187187
result.jdbcType() == JdbcType.UNDEFINED ? null : result.jdbcType(),
188188
hasNestedSelect(result) ? nestedSelectId(result) : null,
189189
null,
190+
null,
190191
result.typeHandler() == TypeHandler.class ? null : result.typeHandler(),
191192
flags);
192193
resultMappings.add(resultMapping);
193194
}
194-
assistant.addResultMap(caseResultMapId, type, resultMapId, null, null, resultMappings);
195+
assistant.addResultMap(caseResultMapId, type, resultMapId, null, resultMappings);
195196
}
196197
}
197198
}
@@ -418,6 +419,7 @@ private void applyResults(Result[] results, Class<?> resultType, List<ResultMapp
418419
result.jdbcType() == JdbcType.UNDEFINED ? null : result.jdbcType(),
419420
hasNestedSelect(result) ? nestedSelectId(result) : null,
420421
null,
422+
null,
421423
result.typeHandler() == TypeHandler.class ? null : result.typeHandler(),
422424
flags);
423425
resultMappings.add(resultMapping);
@@ -455,6 +457,7 @@ private void applyConstructorArgs(Arg[] args, Class<?> resultType, List<ResultMa
455457
arg.jdbcType() == JdbcType.UNDEFINED ? null : arg.jdbcType(),
456458
null,
457459
null,
460+
null,
458461
arg.typeHandler() == TypeHandler.class ? null : arg.typeHandler(),
459462
flags);
460463
resultMappings.add(resultMapping);

src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@ private ResultMap resultMapElement(XNode resultMapNode, List<ResultMapping> addi
231231
resultMapNode.getStringAttribute("ofType",
232232
resultMapNode.getStringAttribute("resultType",
233233
resultMapNode.getStringAttribute("javaType"))));
234-
String notNullColumn = resultMapNode.getStringAttribute("notNullColumn");
235234
String extend = resultMapNode.getStringAttribute("extends");
236235
Class<?> typeClass = resolveClass(type);
237236
Discriminator discriminator = null;
@@ -251,7 +250,7 @@ private ResultMap resultMapElement(XNode resultMapNode, List<ResultMapping> addi
251250
resultMappings.add(buildResultMappingFromContext(resultChild, typeClass, flags));
252251
}
253252
}
254-
ResultMapResolver resultMapResolver = new ResultMapResolver(builderAssistant, id, typeClass, extend, discriminator, notNullColumn, resultMappings);
253+
ResultMapResolver resultMapResolver = new ResultMapResolver(builderAssistant, id, typeClass, extend, discriminator, resultMappings);
255254
try {
256255
return resultMapResolver.resolve();
257256
} catch (IncompleteResultMapException e) {
@@ -306,11 +305,12 @@ private ResultMapping buildResultMappingFromContext(XNode context, Class<?> resu
306305
String nestedSelect = context.getStringAttribute("select");
307306
String nestedResultMap = context.getStringAttribute("resultMap",
308307
processNestedResultMappings(context, Collections.EMPTY_LIST));
308+
String notNullColumn = context.getStringAttribute("notNullColumn");
309309
String typeHandler = context.getStringAttribute("typeHandler");
310310
Class<?> javaTypeClass = resolveClass(javaType);
311311
Class<? extends TypeHandler> typeHandlerClass = (Class<? extends TypeHandler>) resolveClass(typeHandler);
312312
JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
313-
return builderAssistant.buildResultMapping(resultType, property, column, javaTypeClass, jdbcTypeEnum, nestedSelect, nestedResultMap, typeHandlerClass, flags);
313+
return builderAssistant.buildResultMapping(resultType, property, column, javaTypeClass, jdbcTypeEnum, nestedSelect, nestedResultMap, notNullColumn, typeHandlerClass, flags);
314314
}
315315

316316
private String processNestedResultMappings(XNode context, List<ResultMapping> resultMappings) throws Exception {

src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ private boolean applyNestedResultMappings(ResultSet rs, ResultMap resultMap, Met
123123
final boolean knownValue = localRowValueCache.contains(rowKey);
124124
localRowValueCache.add(rowKey);
125125
Object rowValue = getRowValue(rs, nestedResultMap, rowKey);
126-
Set<String> notNullColumns = nestedResultMap.getNotNullColumns();
126+
Set<String> notNullColumns = resultMapping.getNotNullColumns();
127127
boolean anyNotNullColumnIsNotNull = true;
128128
if (notNullColumns != null && !notNullColumns.isEmpty()) {
129129
anyNotNullColumnIsNotNull = false;

src/main/java/org/apache/ibatis/mapping/ResultMap.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public class ResultMap {
1414
private List<ResultMapping> propertyResultMappings;
1515
private Set<String> mappedColumns;
1616
private Discriminator discriminator;
17-
private Set<String> notNullColumns;
1817
private boolean hasNestedResultMaps;
1918

2019
private ResultMap() {
@@ -34,11 +33,6 @@ public Builder discriminator(Discriminator discriminator) {
3433
return this;
3534
}
3635

37-
public Builder notNullColumns(Set<String> notNullColumns) {
38-
resultMap.notNullColumns = notNullColumns;
39-
return this;
40-
}
41-
4236
public Class type() {
4337
return resultMap.type;
4438
}
@@ -115,10 +109,6 @@ public List<ResultMapping> getIdResultMappings() {
115109
public Set<String> getMappedColumns() {
116110
return mappedColumns;
117111
}
118-
119-
public Set<String> getNotNullColumns() {
120-
return notNullColumns;
121-
}
122112

123113
public Discriminator getDiscriminator() {
124114
return discriminator;

src/main/java/org/apache/ibatis/mapping/ResultMapping.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.ArrayList;
99
import java.util.Collections;
1010
import java.util.List;
11+
import java.util.Set;
1112

1213
public class ResultMapping {
1314

@@ -19,6 +20,7 @@ public class ResultMapping {
1920
private TypeHandler typeHandler;
2021
private String nestedResultMapId;
2122
private String nestedQueryId;
23+
private Set<String> notNullColumns;
2224
private List<ResultFlag> flags;
2325
private List<ResultMapping> composites;
2426

@@ -73,6 +75,11 @@ public Builder nestedQueryId(String nestedQueryId) {
7375
return this;
7476
}
7577

78+
public Builder notNullColumns(Set<String> notNullColumns) {
79+
resultMapping.notNullColumns = notNullColumns;
80+
return this;
81+
}
82+
7683
public Builder flags(List<ResultFlag> flags) {
7784
resultMapping.flags = flags;
7885
return this;
@@ -140,6 +147,10 @@ public String getNestedQueryId() {
140147
return nestedQueryId;
141148
}
142149

150+
public Set<String> getNotNullColumns() {
151+
return notNullColumns;
152+
}
153+
143154
public List<ResultFlag> getFlags() {
144155
return flags;
145156
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.apache.ibatis.submitted.not_null_column;
2+
3+
import java.util.Date;
4+
5+
public abstract class Base {
6+
private int tempIntField;
7+
private Date tempDateField;
8+
public int getTempIntField() {
9+
return tempIntField;
10+
}
11+
public void setTempIntField(int tempIntField) {
12+
this.tempIntField = tempIntField;
13+
}
14+
public Date getTempDateField() {
15+
return tempDateField;
16+
}
17+
public void setTempDateField(Date tempDateField) {
18+
this.tempDateField = tempDateField;
19+
}
20+
}

src/test/java/org/apache/ibatis/submitted/not_null_column/Child.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.apache.ibatis.submitted.not_null_column;
22

3-
public class Child {
3+
public class Child extends Base {
44
private Integer id;
55
private Integer fatherId;
66
private String name;

src/test/java/org/apache/ibatis/submitted/not_null_column/Father.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
public class Father {
5+
public class Father extends Base {
66
private Integer id;
77
private String name;
88
private List<Child> children;

0 commit comments

Comments
 (0)