MyBatis: classcastexception-Fehler: java.lang.Integer kann nicht gewirkt werden, um java.lang.Boolean

Bin ich immer diese exception in MyBatis, während Sie versuchen, führen Sie die update-Anweisung(UpdateUser):

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Boolean
at $Proxy6.updateUser(Unknown Source)
at com.nortal.pirs.persistence.dbmybatis.UserDaoMyBatisImpl.updateUser(UserDaoMyBatisImpl.java:60)
at com.nortal.pirs.test.persistence.UserDaoAbstractTest.testUpdateUser(UserDaoAbstractTest.java:117)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Meine Daten geben User, mit denen ich arbeite, sieht wie folgt aus:

public class User {
private String firstName = "";
private String lastName = "";
private String personCode = "";
private Date birthDate = new Date();
private Gender gender = Gender.MALE;
private String email = "";
private String password = "";
private UserState userState = UserState.UNAPPROVED;

public User() {
}

mit den entsprechenden gettters und setter natürlich.

Meine UserMapper.java Schnittstelle für mybatis sieht wie folgt aus:

public interface UserMapper {

public User getUserByEmail(String email);   

public void addUser(User user);

public void removeUser(String email);

public int getNumberOfUsers();

public int userExists(String email);

public boolean updateUser(@Param ("oldUser") User oldUser, @Param("newUser") User newUser);

public Map<String, User> getAllUsers();

}

Und meine UserMapper.xml sieht wie folgt aus:

 <?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="com.nortal.pirs.persistence.dbmybatis.UserMapper">

    <!-- QUESTION: Is the <cache /> needed as described in one of your examples? And what is it meant to do? -->

    <resultMap id="UserMap" type="com.nortal.pirs.datamodel.User">
        <result property="firstName" column="firstName"/>
        <result property="lastName" column="lastName"/>
        <result property="personCode" column="personCode"/>
        <result property="birthDate" column="birthDate" javaType="Date"/>
        <result property="gender" column="gender" javaType="com.nortal.pirs.datamodel.Gender"/>
        <result property="email" column="email"/>
        <result property="password" column="password"/>
        <result property="userState" column="userState" javaType="com.nortal.pirs.datamodel.UserState"/>        
    </resultMap>

    <select id="getUserByEmail" parameterType="String" resultMap="UserMap">
        SELECT 
        firstName,
        lastName,
        personCode,
        birthDate,
        gender,
        email,
        password,
        userState       
        FROM   USER 
        WHERE  email = #{email}
    </select>

    <insert id="addUser" parameterType="User" >
        INSERT INTO user

        (firstName,
        lastName,
        personCode,
        birthDate,
        gender,
        email,
        password,
        userState)

        VALUES
        (#{firstName},
        #{lastName},
        #{personCode},
        #{birthDate},
        #{gender},
        #{email},
        #{password},
        #{userState})        
    </insert>

    <delete id="removeUser" parameterType="String">
        DELETE FROM user
        WHERE email = #{email}
    </delete>


    <select id="getNumberOfUsers" resultType="int">
        SELECT
        COUNT(email)
        FROM USER
    </select>

    <select id="userExists" parameterType="String" resultType="int">
        SELECT CASE WHEN EXISTS (
            SELECT
            COUNT(email)
            FROM USER)
    </select>

    <update id="updateUser" parameterType="map">
        UPDATE user
        SET 
        firstName = #{newUser.firstName},
        lastName = #{newUser.lastName},
        personCode = #{newUser.personCode},
        birthDate = #{newUser.birthDate},
        gender = #{newUser.gender},
        email = #{newUser.email},
        password = #{newUser.password},
        userState = #{newUser.userState}
        WHERE email = #{oldUser.email}
    </update>

</mapper>

wie ich bereits erwähnt habe, die Ausnahme wird ausgelöst, wenn updateUser genannt wird. Das merkwürdige ist ich kann auch nicht alles sehen ganze Zahl im Zusammenhang hier. Ich meine, ich habe sogar versucht, die Tests mit nur aktualisieren eines Feldes. Es ist alles das gleiche. Ich bekomme nicht die Ausnahme nur, wenn die Abfrage komplett entfernt, ich würde die query error oder sowas Fehler...

Irgendwelche Vorschläge? Vielen Dank im Voraus.

Edit: wenn die Leute Stimmen ab-meine Frage hin, ohne etwas zu sagen, Sie sollten wenigstens sagen, was falsch war mit der Frage, das wäre hilfreich... ich habe nicht geschrieben diese Frage aus Spaß. In der Tat, ich bin irgendwie steckengeblieben auf diesem für einige Zeit jetzt...

Haben Sie versucht, Blick auf Ihre updateUser Methode der Erklärung, die zurück boolean (vielleicht ist es so konfiguriert, zurück int statt).
Danke, das war es eigentlich, ich denke, manchmal hat man einfach blind... 😉 nochmals vielen Dank.

InformationsquelleAutor Arturas M | 2012-11-07

Schreibe einen Kommentar