关于@Transient注解的使用

关于@Transient注解的使用

在 Java 中,@Transient注解用于标识一个字段在对象序列化或持久化时应该被忽略。

可以加在字段上,也可以加在getter 方法上

一、描述

当把 @Transient 注解放在 getter 方法上时,对应的属性在持久化或序列化过程中会被忽略。这在某些情况下可能更灵活,比如你可能在一个类中有一些派生属性,这些属性不是直接从数据库中获取,而是通过其他属性计算得到的,你可以用这种方式确保它们不会被意外地持久化。

二、代码示例

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;
    private String tempData;

    // 构造函数、getter 和 setter 方法省略

    @Transient
    public String getTempField() {
        return "This is a transient field derived from other properties. Temp data: " + tempData;
    }
}

在上述示例中,User 类有 idnameage 和 tempData 四个属性,其中 tempField 是通过 getter 方法动态生成的,并且被 @Transient 注解标记,在持久化或序列化时这个属性将被忽略。

假设我们有以下测试代码:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Main {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        User user = new User();
        user.setName("Bob");
        user.setAge(25);
        user.setTempData("Some temp data");

        session.save(user);

        session.getTransaction().commit();
        session.close();

        session = sessionFactory.openSession();
        User retrievedUser = session.get(User.class, user.getId());
        System.out.println("Retrieved User: Name - " + retrievedUser.getName() + ", Age - " + retrievedUser.getAge());
        // 尝试获取被标记为 transient 的属性,这里不会输出任何内容,因为它不会被持久化
        System.out.println("Temp Field: " + retrievedUser.getTempField());
        session.close();
        sessionFactory.close();
    }
}

在这个测试中,我们创建了一个 User 对象并保存到数据库,然后重新从数据库中获取该对象。尝试获取被标记为 transient 的属性 tempField 时,不会输出任何内容,因为它没有被持久化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值