6

以下代码使用@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;
}

在这两种情况下,都不会创建该列。

两个示例代码之间是否有任何不同的功能?

4

1 回答 1

18

@Transient意思是:这个属性根本不是持久的。它不由 JPA 处理。每次从数据库中获取实体时,该属性都将为 null(或由无参数构造函数初始化的任何内容)。

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

于 2013-09-30T07:09:18.657 回答