Skip to content

Commit a498f45

Browse files
committed
Additional tests for #167.
1 parent 2887349 commit a498f45

File tree

3 files changed

+75
-12
lines changed

3 files changed

+75
-12
lines changed

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

+4-12
Original file line numberDiff line numberDiff line change
@@ -499,19 +499,11 @@ private String nestedSelectId(Result result) {
499499
}
500500

501501
private boolean isLazy(Result result) {
502-
Boolean isLazy = null;
503-
if (FetchType.DEFAULT != result.one().fetchType()) {
502+
Boolean isLazy = configuration.isLazyLoadingEnabled();
503+
if (result.one().select().length() > 0 && FetchType.DEFAULT != result.one().fetchType()) {
504504
isLazy = (result.one().fetchType() == FetchType.LAZY);
505-
}
506-
if (FetchType.DEFAULT != result.many().fetchType()) {
507-
if (isLazy == null) {
508-
isLazy = (result.many().fetchType() == FetchType.LAZY);
509-
} else {
510-
throw new BuilderException("Cannot use both @One and @Many annotations in the same @Result");
511-
}
512-
}
513-
if (isLazy == null) {
514-
isLazy = configuration.isLazyLoadingEnabled();
505+
} else if (result.many().select().length() > 0 && FetchType.DEFAULT != result.many().fetchType()) {
506+
isLazy = (result.many().fetchType() == FetchType.LAZY);
515507
}
516508
return isLazy;
517509
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright 2009-2012 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.apache.ibatis.binding;
17+
18+
import java.util.List;
19+
20+
import org.apache.ibatis.annotations.Many;
21+
import org.apache.ibatis.annotations.One;
22+
import org.apache.ibatis.annotations.Result;
23+
import org.apache.ibatis.annotations.Results;
24+
import org.apache.ibatis.annotations.Select;
25+
26+
import domain.blog.Blog;
27+
28+
public interface MapperWithOneAndMany {
29+
30+
@Select({
31+
"SELECT *",
32+
"FROM blog"
33+
})
34+
@Results({
35+
@Result(
36+
property = "author", column = "author_id",
37+
one = @One(select = "org.apache.ibatis.binding.BoundAuthorMapper.selectAuthor"),
38+
many = @Many(select = "selectPostsById"))
39+
})
40+
List<Blog> selectWithBothOneAndMany();
41+
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright 2009-2012 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.apache.ibatis.binding;
17+
18+
import org.apache.ibatis.session.Configuration;
19+
import org.junit.Test;
20+
21+
public class WrongMapperTest {
22+
23+
@Test(expected = RuntimeException.class)
24+
public void shouldFailForBothOneAndMany() throws Exception {
25+
Configuration configuration = new Configuration();
26+
configuration.addMapper(MapperWithOneAndMany.class);
27+
}
28+
29+
}

0 commit comments

Comments
 (0)