以下代码使用@Column
注释使用insertable=false
。
@Entity
public class UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "User_Id")
private int userId;
@Column(name = "User_Name", insertable = false)
private String userName;
}
以下代码改为使用@Transient
注释。
@Entity
public class UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "User_Id")
private int userId;
@Transient
private String userName;
}
在这两种情况下,都不会创建列。
2个样本代码之间是否有任何不同的功能?
答案 0 :(得分:13)
@Transient
表示:此属性根本不是持久性的。它不是由JPA处理的。每次从数据库中获取实体时,该属性都将为null(或者无法由arg构造函数初始化)。
insertable=false
表示JPA在保存实体时不会在insert语句中包含该列。但是在更新实体时它会从数据库中加载它。