关于 @Transient 注解 的使用

关于 @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






猜你喜欢

转载自blog.csdn.net/bwddd/article/details/81013620