Я получаю NPB MyBatis, когда пытаюсь вставить запись с нулевым первичным ключом, а затем вернуть значение значения ключа (триггер oracle задает ключ). ИнтерфейсMyBatis nullPointerException при вводе null
FooMapper:
...
public void insertFooObject (final Foo foo);
...
FooMapper.xml:
...
<insert id="insertFooObject" useGeneratedKeys="true" keyColumn="foo_id" keyProperty="fooId">
insert into foos (foo_id, gcor_id, registration_date)
values (#{fooId, jdbcType=NUMERIC}, #{gcorId, jdbcType=NUMERIC}, #{registrationDate, jdbcType=DATE})
</insert>
...
Вот модель:
public class Foo {
private final Integer fooId;
private final Integer gcorId;
private final Date registrationDate;
public Foo(final Integer fooId, final Integer gcorId, final Date registrationDate) {
this.fooId = fooId;
this.gcorId = gcorId;
this.registrationDate = registrationDate;
}
...
И вот звонок:
...
Foo foo = new Foo(null, 229, null);
fooMapper.insertFooObject(foo);
...
fooMapper вводится пружиной и может быть успешно использован для других операторов SQL. Когда я передаю число для fooId и registrationDate имеет значение null, все работает. Когда fooId равна нулю (как показано на рисунке), я получаю ошибку:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Error updating database. Cause: java.lang.NullPointerException
The error may involve defaultParameterMap
The error occurred while setting parameters
SQL: insert into foos (foo_id, gcor_id, registration_date) values (?, ?, ?)
Cause: java.lang.NullPointerException
Вот мой конфигурационный файл:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
">
<bean id="datasource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@......"/>
<property name="username" value="..."/>
<property name="password" value="..."/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
</bean>
<bean id="fooMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.foo.FooMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource" />
</bean>
</beans>
Любые идеи, как это исправить? Мне не повезло с поиском в googling, и я подумал, что все будет в порядке, указав jdbcType. Благодаря!
можно ли увидеть файл конфигурации mybatis? –
уверен, добавлен файл конфигурации – rimsky