Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mybatis列名冲突?_Java_Mysql_Sql_Mapping_Mybatis - Fatal编程技术网

Java mybatis列名冲突?

Java mybatis列名冲突?,java,mysql,sql,mapping,mybatis,Java,Mysql,Sql,Mapping,Mybatis,我在项目中使用MyBatis作为持久层 我在mySql数据库中有两个表,paytransaction和paymenttype,定义如下: PayTransaction PaymentType Field Field ------------- ------- id payment_state creation_date update_date pa

我在项目中使用MyBatis作为持久层

我在mySql数据库中有两个表,paytransaction和paymenttype,定义如下:

PayTransaction          PaymentType

Field                   Field
-------------           -------
id                  
payment_state       
creation_date       
update_date     
payment_type ----FK---->id
payment_id              description
因此,paytransaction通过payment_type列(外键)关联paymenttype

我的映射器的定义如下:

PayTransaction          PaymentType

Field                   Field
-------------           -------
id                  
payment_state       
creation_date       
update_date     
payment_type ----FK---->id
payment_id              description
支付交易

<resultMap id="payTransactionPaymentTypeResultMap" type="com.XXX.payplatform.model.to.impl.TOPayTransaction" >
    <id     column="id"                     property="id"                   javaType="long"/>
    <result column="payment_state"          property="payment_state"        javaType="string"/>
    <result column="creation_date"          property="creation_date"        javaType="date"/>
    <result column="update_date"            property="update_date"          javaType="date"/>
    <result column="payment_id"             property="payment_id"           javaType="long"/>
    <association column="payment_type" property="paymentType" javaType="com.XXX.payplatform.model.to.impl.TOPaymentType" resultMap="com.XXX.payplatform.model.dao.interfaces.IDAOPaymentType.paymentTypeResultMap"/>
</resultMap>

付款类型

<resultMap id="paymentTypeResultMap" type="com.XXX.payplatform.model.to.impl.TOPaymentType" >
    <id     column="id"                     property="id"                   javaType="long"/>
    <result column="description"            property="description"          javaType="string"/>
</resultMap>

SQL JOIN语句是:

<sql id="joinPayTransactionPaymentType">
    select paytransaction.id, paytransaction.payment_state, paytransaction.creation_date,paytransaction.update_date, paytransaction.payment_id, 
    paymenttype.id, paymenttype.description
    from paytransaction
    INNER JOIN paymenttype ON paymenttype.id = paytransaction.payment_type 
</sql>

选择paytransaction.id、paytransaction.payment\u状态、paytransaction.creation\u日期、paytransaction.update\u日期、paytransaction.payment\u id、,
paymenttype.id,paymenttype.description
从付费交易
paymenttype.id=paytransaction.payment\u类型上的内部联接paymenttype
paytransaction和paymenttype表中名为“id”的列都会出现问题。在映射对象时,相同的值会进入ids字段,即如果paytransaction的id为39,则映射后java对象中paymenttype的id在db中为3时也将为39

我试过写alias,比如:

<sql id="joinPayTransactionPaymentType">
    select paytransaction.id AS "paytransaction.id", paytransaction.payment_state as payment_state, paytransaction.creation_date as creation_date,paytransaction.update_date as update_date, paytransaction.payment_id as payment_id, 
    paymenttype.id AS "paymenttype.id", paymenttype.description as description
    from paytransaction
    INNER JOIN paymenttype ON paymenttype.id = paytransaction.payment_type 
</sql>

选择paytransaction.id作为“paytransaction.id”,paytransaction.payment\u状态作为payment\u状态,paytransaction.creation\u日期作为creation\u日期,paytransaction.update\u日期作为update\u日期,paytransaction.payment\u id作为payment\u id,
paymenttype.id为“paymenttype.id”,paymenttype.description为描述
从付费交易
paymenttype.id=paytransaction.payment\u类型上的内部联接paymenttype
但没有结果。我认为唯一可行的解决方案是更改db中列的名称,如“paymenttype_id”和“paytransaction_id”

是否有任何解决方案,或者这是一个mybatis错误


谢谢

对于MyBatis来说,具有相同的属性名称不是问题,只要您能够将确定的列(或列别名)映射到这些属性。为结果列提供别名时,也应为
paymentTypeResultMap
提供相同的列名。那就行了

<resultMap id="payTransactionPaymentTypeResultMap" type="com.XXX.payplatform.model.to.impl.TOPayTransaction" >
    <id     column="id"                     property="id"                   javaType="long"/>
    <result column="payment_state"          property="payment_state"        javaType="string"/>
    <result column="creation_date"          property="creation_date"        javaType="date"/>
    <result column="update_date"            property="update_date"          javaType="date"/>
    <result column="payment_id"             property="payment_id"           javaType="long"/>
    <association column="payment_type" property="paymentType" javaType="com.XXX.payplatform.model.to.impl.TOPaymentType" resultMap="com.XXX.payplatform.model.dao.interfaces.IDAOPaymentType.paymentTypeResultMap"/>
</resultMap>



选择paytransaction.id,paytransaction.payment\u状态作为payment\u状态,paytransaction.creation\u日期作为creation\u日期,paytransaction.update\u日期作为update\u日期,paytransaction.payment\u id作为payment\u id,
paymenttype.id作为paymenttype\u id,paymenttype.description作为描述
从付费交易
paymenttype.id=paytransaction.payment\u类型上的内部联接paymenttype

谢谢Yigitalp!但是如果我理解正确,我需要更改db中的paymenttype“id”列,然后更改映射器中的列定义,对吗?这里的问题是paymenttype和paytransaction“id”列都被命名为“id”。我的意思是,这不是属性冲突,而是列名冲突。对不起,我编辑了标题。您不需要在DB中更改列的名称。您可以编写类似“选择id作为paymenttype\u id FROM paymenttype”的查询。这解决了列名冲突。MyBatis不需要知道列的“真实”名称,重要的是来自查询的结果集。“joinPayTransactionPaymentType”sql将返回'paymenttype.id'作为'paymenttype_id';'paytransaction.id'作为'id'。然后MyBatis将“paymenttype_id”映射到“TopPaymentType”对象中的“id”字段“TOPayTransaction”对象中的“id”到“id”字段。您好!谢谢你的回复。但是我正在这样做,我得到了映射错误。嗨,也许你可以用你得到的错误更新这个问题。
<sql id="joinPayTransactionPaymentType">
    select paytransaction.id, paytransaction.payment_state as payment_state, paytransaction.creation_date as creation_date,paytransaction.update_date as update_date, paytransaction.payment_id as payment_id, 
    paymenttype.id AS paymenttype_id, paymenttype.description as description
    from paytransaction
    INNER JOIN paymenttype ON paymenttype.id = paytransaction.payment_type 
</sql>