前言
小编在实现项目功能时,由于业务需要,在之前的entity的字段基础上,需要添加新的字段,但是又不能在entity的Java类中直接添加字段,因为这需要更改数据库才能实现。(也不能在不修改数据库的情况下直接添加字段,因为会影响mybatis封装的SQL语句操作的方法的正确执行)
这时候,我们就需要扩展实体model,它不与数据库中的表产生关联,但是能够查询对应表中的相应数据。是不是很神奇?快来看看entity与model之间的不同之处吧!
Error 500: unknown column
报错信息如下:这是在不了解model扩展实体与数据库表之间的关联时,在SQL查询的时候,在查询字段范围中,添加了新的字段:appraiser_name,导致报错。
对比两种实体的代码编写
一、Java类注解不同
1.entity中代码:需要引用@Table、@Column
@ApiModel(value = "AppraiseResultEntity:appraiseResult")
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "tip_appraise_result")
public class AppraiseResultEntity extends BaseEntity implements Serializable{
/**
* 被评价人
*/
@ApiModelProperty(value = "被评价人")
@Column(name = "appraiser_id")
private String appraiserId;
/**
* 评价人
*/
@ApiModelProperty(value = "评价人")
@Column(name = "user_id")
private String userId;
/**
* 评论内容
*/
@ApiModelProperty(value = "评论内容")
@Column(name = "content")
private String content;
2.model中的Java类代码,不需要引用@Table,@Column 注解,因为它不需要直接和数据库表直接建立关联。
@ApiModel(value = "AppraiseResultEntity:appraiseResult")
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Entity
public class AppraiseResultModel extends BaseEntity implements Serializable {
/**
* 被评价人
*/
@ApiModelProperty(value = "被评价人")
private String appraiserId;
/**
* 评价人
*/
@ApiModelProperty(value = "评价人")
private String userId;
/**
* 评价人姓名
*/
@ApiModelProperty(value = "评价人姓名")
private String userName;
/**
* 被评价人姓名
*/
@ApiModelProperty(value = "被评价人姓名")
private String appraiserName;
/**
* 评论内容
*/
@ApiModelProperty(value = "评论内容")
private String content;
二、mybatis的xml中的SQL语句
1.entity中的SQL语句,需要引用entity实体的包
<select id="queryAllByAppraiserId" resultType="此处省略..entity.ext.AppraiseResultEntity">
SELECT
<include refid="Base_Column_List"/>
FROM tip_appraise_result WHERE appraiser_id=#{appraiserId}
</select>
2.model对应的SQL语句,需要引用model实体的包
注意:select 的查询字段一定要与数据库中的字段一致,不能添加model实体中新添加的字段,否则会报上面的500,unknown column。
<select id="queryAllByAppraiserId" resultType="此处省略..entity.ext.AppraiseResultModel">
SELECT
<include refid="Base_Column_List"/>
FROM tip_appraise_result WHERE appraiser_id=#{appraiserId}
</select>
小结
小编非常感谢这次的错误,也感谢小伙伴的帮忙,是她的思路帮助我解决了这个问题,是她一步步排查问题,提出model与entity之间是有区别的,而区别点就在于字段的不同。
感谢您的访问!