关于 @Transient 第一次看到这个注解,于是百度一下.
实体类中使用了@Table注解后,想要添加表中不存在的字段,就要使用@Transient这个注解了。
使用 @Transient 表示该属性并非是一个要映射到数据库表中的字段,只是起辅助作用.ORM框架将会忽略该属性
注解可以加在属性上 也可以加在get()上面
一下只是自己做的简单测试的,还望指正.
使用到的有两个@Transient
javax.persistence.Transient;
org.springframework.data.annotation.Transient;
我对这两个都进行了简单的测试
第一次使用是 org.springframework.data.annotation.Transient 下面的
import org.springframework.data.annotation.Transient;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "t_student_test_transient")
public class Student {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
private Integer age;
@Transient
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Transient
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
结果,字段都自动映射了. 加在属性上面也是一样的效果 数据库字段没有任何改变 @Transient好像没有起作用,我也是菜鸟不懂是因为什么,希望大佬看到能够指出
再使用下javax,persistence下的
import javax.persistence.*;
@Entity
@Table(name = "t_student_test_transient")
public class Student {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
private Integer age;
@Transient
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Transient
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
同样是加在get方法上面,然后看数据库 发现还是没有变化.
这次将注解放在属上上
import javax.persistence.*;
@Entity
@Table(name = "t_student_test_transient")
public class Student {
@Id
@GeneratedValue
private Long id;
private String username;
@Transient
private String password;
@Transient
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
再看数据库,发现 加上@Transient 注解的字段都没有被映射进来.
所以当想要忽略某个字段的,不让其映射数据库时候 可以使此注解@Transient