クエリMyBatisのを使用しているとき今日はエラーが発生しました
Error attempting to get column 'e_gender' from result set. Cause: java.sql.SQLException: Cannot convert value '男' from column 3 to TIMESTAMP.
; Cannot convert value '男' from column 3 to TIMESTAMP.; nested exception is java.sql.SQLException: Cannot convert value '男' from column 3 to TIMESTAMP.
インターネットにソリューションの多くを確認し、それらのほとんどはであると言われているデータベースのフィールドタイプとエンティティクラス定義の一貫性のない属性タイプの原因が、見て:
<resultMap type="com.xyw.hospital.model.entity.Employee" id="BaseMap">
<result property="eId" column="e_id" jdbcType="INTEGER"/>
<result property="eName" column="e_name" jdbcType="VARCHAR"/>
<result property="eGender" column="e_gender" jdbcType="VARCHAR"/>
<result property="eBirthday" column="e_birthday" jdbcType="TIMESTAMP"/>
<result property="eDid" column="e_did" jdbcType="INTEGER"/>
<result property="eRoleid" column="e_roleid" jdbcType="INTEGER"/>
<result property="eTel" column="e_tel" jdbcType="VARCHAR"/>
<result property="eVprice" column="e_vprice" jdbcType="NUMERIC"/>
<result property="eState" column="e_state" jdbcType="INTEGER"/>
<result property="eCreateTime" column="e_create_time" jdbcType="TIMESTAMP"/>
<result property="eClossTime" column="e_closs_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="items">
e_id, e_name, e_gender, e_birthday, e_did, e_roleid, e_tel, e_vprice, e_state, e_create_time, e_closs_time </sql>
<!--查询单个-->
<select id="queryById" resultMap="BaseMap">
select
<include refid="items"/>
from employee
where e_id = #{eId}
</select>
CREATE TABLE `employee` (
`e_id` int(11) NOT NULL AUTO_INCREMENT,
`e_name` varchar(25) DEFAULT NULL,
`e_gender` varchar(4) DEFAULT NULL COMMENT '''男''或''女''',
`e_birthday` date DEFAULT NULL,
`e_did` int(11) DEFAULT NULL,
`e_roleid` int(11) DEFAULT NULL,
`e_tel` varchar(15) DEFAULT NULL,
`e_vprice` decimal(10,2) DEFAULT NULL,
`e_state` int(1) DEFAULT '0' COMMENT '0 新注册(默认) 1 在职 2离职',
`e_create_time` date DEFAULT NULL,
`e_closs_time` date DEFAULT NULL,
PRIMARY KEY (`e_id`) USING BTREE,
KEY `idx_did` (`e_did`) USING BTREE,
KEY `idx_roleid` (`e_roleid`) USING BTREE,
KEY `idx_state` (`e_state`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
protected Integer eId;
protected String eName;
protected String eGender;
protected Date eBirthday;
protected Integer eDid;
protected Integer eRoleid;
protected String eTel;
protected Double eVprice;
protected Integer eState;
protected Date eCreateTime;
protected Date eClossTime;
public Employee(String eName, String eGender, Date eBirthday, String eTel, Integer eDid, Integer eRoleid, Double eVprice) {
//略
}
私たちは、私が困惑している一貫性の結果として、一貫性のあるフィールドの定義を見ることができます。
この場所はそれである本当の理由は何ですか?
私たちが見てきたが、私はそれがe_id-> ENAME、e_name-> eGender、e_gender-> eBirthday、なるように、余分なデータがデータコンストラクタで見つかっ引き起こし、ここでフィールドを不要にするコンストラクタメソッドを持っていますe_genderのvchar、およびeBirthday日付型は、リード型変換が失敗したため、ここにあります。
ここでは腰痛の種類、変換の種類についての質問はここに不明であると述べました。しかし、私は覚えているデータベースフィールドの定義はエンティティクラスのフィールドの型と一致していなければなりません。
ここでの問題は、その割当ては、エンティティクラスコンストラクタMyBatisの割り当てを行う場合の構成パラメータおよび方法の数が設定、特に、以下のパラメータを前述の、割り当て意志をもたらすMySQLの場合、フィールドの数が矛盾して使用されています順番に割り当ては、それが間違っている可能性があります。
ここでは解決策は単純で、エンティティクラス限り、空のコンストラクタを追加
public Employee() {
}
缶は、MyBatisのは、適切な施工方法を見つけられない場合は、空のコンストラクタメソッドを使用します、最も適切な施工方法の割り当てを使用してを優先させて頂きます、結果セットが割り当てにエンティティクラスのプロパティから同じフィールド名を検索しますプロパティの割り当て。
それは先生が以前javaweb常に空のコンストラクタを学ぶことの重要性を強調していたときのことを思い出すが、コンストラクタのパラメータを定義する必要がある場合は、まだ、POJOクラスの将来を定義するとき、私は覚えて、このエラーを理解することはできません同様の問題は、予防するために、構成するために引数なしでコンストラクタを取る必要があります。
これらは、実際の答えと一致しないことが、私自身の理解している私の兄を修正するために歓迎します。