我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。
然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,诚然,你可以让这个类来实现Externalizable接口,这个接口是Serilizable的子接口,但是你必须实现readExternal和writeExternal方法,你可以在这两个方法中实现具体属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行具体属性的序列化。java的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
@Transient的作用 :
用于注释pojo对象中的属性,被注释的属性将成为短暂的,不会持久化到数据库的“短暂”属性。
Hibernate annotation 的实体类中如果存在数据库中没有的字段,也就是我们常说的根据业务需求临时添加的一些字段供我们存放数据,那么就需要在新添加的这个字段中加上 @Transient
例子:
package com.capinfo.plan.entity;
import java.sql.Blob;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
/**
* @类功能说明:基本信息表
* @创建时间:2013-6-18 上午10:15:45
* @版本:V1.0
*/
@Entity
@Table(name = "baseinfo")
public class NationCheckunitBaseinfo implements java.io.Serializable {
// Fields
private static final long serialVersionUID = 4141383356877794599L;
private String uuid;
private String route;
private Blob pic;
private Date lastUpdateTime;
//加签之后的字段
private String signField;
//验签返回值
private String signFlag;
// Constructors
/** default constructor */
public NationCheckunitBaseinfo() {
}
/** minimal constructor */
public NationCheckunitBaseinfo(String uuid) {
this.uuid = uuid;
}
/** full constructor */
public NationCheckunitBaseinfo(String uuid, String route,
Blob pic, Date lastUpdateTime,String signField) {
this.uuid = uuid;
this.route = route;
this.pic = pic;
this.lastUpdateTime = lastUpdateTime;
this.signField = signField;
}
// Property accessors
@Id
@Column(name = "UUID", unique = true, nullable = false, length = 36)
public String getUuid() {
return this.uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
@Column(name = "ROUTE", length = 100)
public String getRoute() {
return this.route;
}
public void setRoute(String route) {
this.route = route;
}
@Column(name = "PIC")
public Blob getPic() {
return this.pic;
}
public void setPic(Blob pic) {
this.pic = pic;
}
@Temporal(TemporalType.DATE)
@Column(name = "LAST_UPDATE_TIME", length = 10)
public Date getLastUpdateTime() {
return this.lastUpdateTime;
}
public void setLastUpdateTime(Date lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
@Column(name = "SIGN_FIELD", length = 250)
public String getSignField() {
return signField;
}
public void setSignField(String signField) {
this.signField = signField;
}
@Transient
public String getSignFlag() {
return signFlag;
}
public void setSignFlag(String signFlag) {
this.signFlag = signFlag;
}
}
数据库中将不会出现signFlag对应的字段
使用的时候,该字段可以直接存储到实体类中
NationCheckunitBaseinfo baseinfo = list.get(i);
//将验签返回结果放到实体类的flag字段中
String result = getSignResult(baseinfo);
baseinfo .setSignFlag(result);
也可以存放到map中
Map map = list.get(i);
String nSignFlag = getSignResult(uuid,1, cardType,cardNumber,name,credentialCode);
String sSignFlag = getSignResult(uuid,2, checkIspass,examCardNum,getCardStatus,ttCode);
//将验签返回结果放到实体类的flag字段中
list.get(i).put("nSignFlag", nSignFlag);
list.get(i).put("sSignFlag", sSignFlag);
页面上:遍历时,该字段与其他字段一样使用
相关推荐
java关键字transient
Java中的transient关键字
JAVA中transient关键字的讲解
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,
关于Java中关键字transient和串行化的简略介绍
主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文章向大家介绍Java transient关键字的使用方法和实例,包括的知识点有transient的作用、transient使用小结、transient使用细节,需要的朋友可以参考一下
主要介绍了Java transient关键字原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
哎,虽然自己熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~...
主要介绍了Java transient关键字与序列化操作,结合实例形式详细分析了java序列化操作相关实现方法与操作注意事项,需要的朋友可以参考下
主要介绍了Java transient 关键字是干啥的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
import java.io.*; public class PersonMapper { private PersonMapper() {} private static PersonMapper mapper; /** * 获取单例 * @return 单例 */ public static PersonMapper getInstance() { if ...
NULL 博文链接:https://jackyz548.iteye.com/blog/1662257
写一段代码理清序列化、反序列化的流程。本篇文章序列化、反序列化用的类是同一个类,可以通过注释main中1然后修改Stu类实现有无transient关键字修饰、...import java.io.*; public class SerializableDemo {
主要介绍了Java中的transient关键字介绍,需要的朋友可以参考下
深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)
主要和大家说一说java关键字final和transient,感兴趣的小伙伴们可以参考一下
native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...