Skip to content

Commit bb898eb

Browse files
committed
Merge pull request #140 from domaframework/fix-null-assignment-for-primitive-type
プリミティブ型のプロパティにnullがアサインされる場合に例外が発生していた不具合をデフォルト値が設定されるように修正
2 parents e3562e6 + 4869c79 commit bb898eb

File tree

5 files changed

+41
-1
lines changed

5 files changed

+41
-1
lines changed

src/main/java/org/seasar/doma/internal/jdbc/entity/PropertyField.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,9 @@ private void setFieldValue(Field field, ENTITY entity, Object value) {
111111
entityClass.getName(), path);
112112
}
113113
}
114+
115+
public boolean isPrimitive() {
116+
Field field = fields.getLast();
117+
return field.getType().isPrimitive();
118+
}
114119
}

src/main/java/org/seasar/doma/jdbc/entity/DefaultPropertyType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ private Supplier<Property<ENTITY, BASIC>> createPropertySupplier() {
203203
(Scalar<BASIC, OptionalDouble>) new OptionalDoubleScalar());
204204
} else {
205205
return () -> new DefaultProperty<BASIC>(new BasicScalar<>(
206-
wrapperSupplier, field.getClass().isPrimitive()));
206+
wrapperSupplier, field.isPrimitive()));
207207
}
208208
}
209209

src/test/java/org/seasar/doma/internal/jdbc/entity/Person.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ public class Person extends Animal {
2020
public String name;
2121

2222
public Address address;
23+
24+
public int age;
2325
}

src/test/java/org/seasar/doma/internal/jdbc/entity/PropertyFieldTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,10 @@ public void testSetValue_nestedParentPath() throws Exception {
110110
}
111111
}
112112

113+
public void testIsPrimitive() throws Exception {
114+
PropertyField<Person> age = new PropertyField<>("age", Person.class);
115+
assertTrue(age.isPrimitive());
116+
PropertyField<Person> name = new PropertyField<>("name", Person.class);
117+
assertFalse(name.isPrimitive());
118+
}
113119
}

src/test/java/org/seasar/doma/jdbc/entity/DefaultPropertyTypeTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import junit.framework.TestCase;
1919

20+
import org.seasar.doma.wrapper.IntegerWrapper;
2021
import org.seasar.doma.wrapper.StringWrapper;
2122

2223
/**
@@ -31,6 +32,12 @@ public class DefaultPropertyTypeTest extends TestCase {
3132
@SuppressWarnings("unused")
3233
private Foo foo;
3334

35+
@SuppressWarnings("unused")
36+
private int primitiveInt;
37+
38+
@SuppressWarnings("unused")
39+
private Integer integer;
40+
3441
public void testIsQuoteRequired_true() throws Exception {
3542
boolean isQuoteRequired = true;
3643
DefaultPropertyType<Object, DefaultPropertyTypeTest, String, Object> propertyType = new DefaultPropertyType<>(
@@ -138,6 +145,26 @@ public void testGetColumnName_naiming_quote_quoteNotRequired()
138145
+ text + "]"));
139146
}
140147

148+
public void testPrimitivePropertyDefaultValue() throws Exception {
149+
DefaultPropertyType<Object, DefaultPropertyTypeTest, Integer, Object> propertyType = new DefaultPropertyType<>(
150+
DefaultPropertyTypeTest.class, Integer.class, Integer.class,
151+
() -> new IntegerWrapper(), null, null, "primitiveInt",
152+
"primitiveInt", NamingType.NONE, true, true, false);
153+
Property<DefaultPropertyTypeTest, Integer> property = propertyType
154+
.createProperty();
155+
assertEquals(0, property.get());
156+
}
157+
158+
public void testWrapperPropertyDefaultValue() throws Exception {
159+
DefaultPropertyType<Object, DefaultPropertyTypeTest, Integer, Object> propertyType = new DefaultPropertyType<>(
160+
DefaultPropertyTypeTest.class, Integer.class, Integer.class,
161+
() -> new IntegerWrapper(), null, null, "integer", "integer",
162+
NamingType.NONE, true, true, false);
163+
Property<DefaultPropertyTypeTest, Integer> property = propertyType
164+
.createProperty();
165+
assertNull(property.get());
166+
}
167+
141168
public static class Foo {
142169
String hoge;
143170
}

0 commit comments

Comments
 (0)