简介
这是今天做接口遇到的第二个问题,挺无奈的,因为项目原本用的就是JPA,之前没有使用过就遇到了一些坑。
情况
在表的映射实体添加一个非表字段的自定义属性(没有使用 @Column
注解),在调用插入操作时报错:无效列名 XXX
例子
public class WmsMovePlan implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
Integer id;
@Column(name = "prodcode", nullable = false)
String prodcode;
// 这个字段自定义的
String cusStatus;
}
public void insert(WmsMovePlan plan) {
// 报错:“无效列名 cusStatus`
dao.save(plan);
}
原因
报出上面的异常,说明即使不加 @Column 注解,JPA也会持久化该字段。
意图
在表的映射实体添加一个属性,而数据表中不必添加该字段。
解决
JPA不持久化某字段的解决方案:@Transient 注解(javax.persistence.Transient)表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。
网友评论