Hibernate中“insertable = false”和“transient”之间的区别

时间:2013-09-30 07:01:01

标签: java hibernate jpa

以下代码使用@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个样本代码之间是否有任何不同的功能?

1 个答案:

答案 0 :(得分:13)

@Transient表示:此属性根本不是持久性的。它不是由JPA处理的。每次从数据库中获取实体时,该属性都将为null(或者无法由arg构造函数初始化)。

insertable=false表示JPA在保存实体时不会在insert语句中包含该列。但是在更新实体时它会从数据库中加载它。