问题发现
在写安卓程序的过程中,需要传递一个username 到 服务端,但是每个@PostMapping对应的方法都写String username 过于麻烦,于是直接在 对应的类中增加了一个属性 String username 以及 Get、Set,但是 随即执行插入的时候报了这个错
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘username’ in ‘field list’
之前一直以为 通用Mapper 只扫描 @Column 注解的属性, 现在看来并不是
解决方式
更改 username属性为
注 — 该有两个包有同名注解,应该使用javax.persistence包下的
@Transient
private String username ;
即可
那为什么以前写一对多的关系的时候并没有把 对应的属性扫描进去呢?
解答-> 往常写的一对多 类似于这个
@Table(name = "`title`")
public class Title {
@Id
@Column(name = "`Id`")
@GeneratedValue(generator = "JDBC")
private Integer id;
private Content content;
这种 情况下 insert 语句并不会出错
出错的是这样的
@Table(name = "`title`")
public class Title {
@Id
@Column(name = "`Id`")
@GeneratedValue(generator = "JDBC")
private Integer id;
// private String username ;
总结
显而易见 , String 以及基本数据类型 是会被默认扫描进去的,无论你有没有注解@Column ,
因此,如果 你自定义属性 为String 或者基本数据类型 则需要使用@Transient 注解 ,而如果自定义字段是引用类型则不需要使用该注解