@Transient

当遇到数据库报错Unknowncolumnxxx.fileIdinfieldlist时,可以使用@Transient注解来标记实体类中的临时变量fileId,避免ORM框架尝试映射该属性到数据库。@Transient注解指示该属性不应作为数据库字段,避免序列化时包含此属性。Java的transient关键字用于防止变量在序列化过程中被保存,适用于生命周期仅存在于内存中的属性。
摘要由CSDN通过智能技术生成

遇到的问题

报错大概是长这样的, Unknown column 'xxx.fileId' in 'field list' ,因为这个 fileId 只是想作为一个临时变量用一下,并不想存入实体类对应的表中。这个属性在实体类中没有加 @Transient 注解,于是就报错了。

用法

我们来看看 @Transient 注解:

  • @transient 就是需要给某个 javabean 添加一个属性,而这个属性我们又不希望它存到数据库中去,仅仅是做个临时变量用一下。不修改已经存在数据库中数据的数据结构。那么这时候就可以用这个注解了。
  • @Transient 表示该属性并非一个到数据库表的字段的映射,ORM 框架将忽略该属性。
  • 如果一个属性并非数据库表的字段映射,就务必将其标示为 @Transient ,否则,ORM 框架默认其注解为 @Basic 。@Basic 用于声明属性的存取策略,表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的 getXxxx() 方法,默认即为@Basic。

java 的 transient 关键字的作用是需要实现 Serilizable 接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

原理:

我们知道一个对象只要实现了 Serilizable 接口,这个对象就可以被序列化。只要这个类实现了 Serilizable 接口,这个类的所有属性和方法都会自动序列化。

我们我们不想让一个实现了 Serilizable 接口的类里的某一个字段被序列化,就加上 transient 关键字修饰,被 transient 关键字修饰的变量不再能被序列化。

我们经常会有这样的需求,一个类的有些属性需要序列化,而其他属性不需要被序列化。也就是说,这个不需要被序列化的字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。此时就该 transient 登场了。

transient使用小结

1)一旦变量被 transient 修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient 关键字只能修饰变量,而不能修饰方法和类。本地变量是不能被 transient 关键字修饰的。变量如果是用户自定义类变量,则该类需要实现 Serializable 接口。

3)被 transient 关键字修饰的变量不再能被序列化,一个静态变量不管是否被 transient 修饰,均不能被序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值