Hallo,
ich hoff, hier kann mir jemand helfen:
Ich bin noch dabei mich in MyBatis einzuarbeiten und versuche gerade einfache SELECT und UPDATE Statements auszuführen. Das Select an sich klappt wunderbar, nur das UPDATE wirft mir ständig Exceptions um die Ohren.
Meine Userklasse hat die Elemente, die einzig und allein geupdatetet werden können (in der DB gibts mehr Spalten).
Mein Vorgehen:
- erst hole ich mir den User in meinen User Datentyp (Name, Nachname, ID und Adresse).
- dann änder ich in dem gerade gefüllten Objekt den Nachnamen und wollte dann damit ein UPDATE machen.
- Daraufhin kommt jedoch die Exception.
Kennt jemand von euch diese Fehlermeldung und kann mir dabei helfen?
Configurationen:
[XML]
<typeAliases>
<typeAlias alias="User" type="de.webservice.dbtest.model.User"/>
</typeAliases>
<environments default="development">
...
</environments>
<mappers>
<mapper resource="de/webservice/dbtest/data/UserMapper.xml"/>
</mappers>
[/XML]
Mapper xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="de.webservice.dbtest.data.UserMapper">
<resultMap id="result" type="User">
<result property="id" column="CLIENTNO"/>
<result property="startdate" column="STARTDATE"/>
<result property="enddate" column="ENDDATE"/>
<result property="firstname" column="FIRSTNAME"/>
<result property="name" column="NAME"/>
<result property="street" column="STREET"/>
<result property="houseno" column="HOUSENO"/>
<result property="zipcode" column="ZIPCODE"/>
<result property="city" column="CITY"/>
</resultMap>
<select id="getUser4Id" parameterType="long" resultMap="result">
SELECT CLIENTNO, STARTDATE, ENDDATE, FIRSTNAME, NAME, STREET, HOUSENO, ZIPCODE, CITY
FROM ADDRESS adr
WHERE CLIENTNO = #{id}
</select>
<update id="setUserData" parameterType="User">
UPDATE ADDRESS
SET SURNAME = #{name}
WHERE CLIENTNO = #{id}
AND GETDATE() BETWEEN STARTDATE AND ENDDATE
</update>
</mapper>
[/XML]
Mapper Java
User Klasse
Habe ich irgendwie etwas vergessen? Oder fällt euch ein Fehler auf?
Ich arbeite mit MyBatis 3.0.5 und einer MSSQL DB.
Grüße,
Jay
ich hoff, hier kann mir jemand helfen:
Ich bin noch dabei mich in MyBatis einzuarbeiten und versuche gerade einfache SELECT und UPDATE Statements auszuführen. Das Select an sich klappt wunderbar, nur das UPDATE wirft mir ständig Exceptions um die Ohren.
Code:
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.sql.DataTruncation: Data truncation
### The error may involve de.webservice.dbtest.data.UserMapper.setUserData-Inline
### The error occurred while setting parameters
### Cause: java.sql.DataTruncation: Data truncation
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:123)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)
at $Proxy1.setUserData(Unknown Source)
at de.webservice.dbtest.connector.MyBatisTest.updateUser(MyBatisTest.java:86)
at de.webservice.dbtest.connector.MyBatisTest.main(MyBatisTest.java:111)
Caused by: java.sql.DataTruncation: Data truncation
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:382)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632)
at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:584)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:546)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.execute(JtdsPreparedStatement.java:558)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:22)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:51)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:29)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:88)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:43)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:121)
... 5 more
Meine Userklasse hat die Elemente, die einzig und allein geupdatetet werden können (in der DB gibts mehr Spalten).
Mein Vorgehen:
- erst hole ich mir den User in meinen User Datentyp (Name, Nachname, ID und Adresse).
- dann änder ich in dem gerade gefüllten Objekt den Nachnamen und wollte dann damit ein UPDATE machen.
- Daraufhin kommt jedoch die Exception.
Kennt jemand von euch diese Fehlermeldung und kann mir dabei helfen?
Configurationen:
[XML]
<typeAliases>
<typeAlias alias="User" type="de.webservice.dbtest.model.User"/>
</typeAliases>
<environments default="development">
...
</environments>
<mappers>
<mapper resource="de/webservice/dbtest/data/UserMapper.xml"/>
</mappers>
[/XML]
Mapper xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="de.webservice.dbtest.data.UserMapper">
<resultMap id="result" type="User">
<result property="id" column="CLIENTNO"/>
<result property="startdate" column="STARTDATE"/>
<result property="enddate" column="ENDDATE"/>
<result property="firstname" column="FIRSTNAME"/>
<result property="name" column="NAME"/>
<result property="street" column="STREET"/>
<result property="houseno" column="HOUSENO"/>
<result property="zipcode" column="ZIPCODE"/>
<result property="city" column="CITY"/>
</resultMap>
<select id="getUser4Id" parameterType="long" resultMap="result">
SELECT CLIENTNO, STARTDATE, ENDDATE, FIRSTNAME, NAME, STREET, HOUSENO, ZIPCODE, CITY
FROM ADDRESS adr
WHERE CLIENTNO = #{id}
</select>
<update id="setUserData" parameterType="User">
UPDATE ADDRESS
SET SURNAME = #{name}
WHERE CLIENTNO = #{id}
AND GETDATE() BETWEEN STARTDATE AND ENDDATE
</update>
</mapper>
[/XML]
Mapper Java
Java:
package de.webservice.dbtest.data;
import java.util.List;
import de.webservice.dbtest.model.User;
public interface UserMapper {
List<User> getUser4Id(long customerid);
void setUserData(User user);
}
User Klasse
Java:
package de.webservice.dbtest.model;
import java.sql.Date;
public class User {
private String id;
private long startdate;
private long enddate;
private String firstname;
private String name;
private String street;
private String houseno;
private String zipcode;
private String city;
/**
* Getter und Setter Block
*/
[...]
Habe ich irgendwie etwas vergessen? Oder fällt euch ein Fehler auf?
Ich arbeite mit MyBatis 3.0.5 und einer MSSQL DB.
Grüße,
Jay