serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
@Transient 表示该属性并非一个到数据库表的字段的映射,也就不会被持久化,ORM框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。
注意static变量也是可以串行化的 。
首先,让我们看一些Java serialization的代码:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* @param args
* @author Administrator
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public class TranDemo implements Serializable{
private static final long serialVersionUID = -4868069994540618528L;
private transient String username;
private String password;
public static void main(String[] args) throws FileNotFoundException,
IOException, ClassNotFoundException {
// TODO Auto-generated method stub
String path = "C:" + File.separator + "TranDemo.txt";
File file = new File(path);
TranDemo transientDemo = new TranDemo();
transientDemo.setUsername("administrator");
transientDemo.setPassword("admin");
ObjectOutput output = new ObjectOutputStream(new FileOutputStream(file));
output.writeObject(transientDemo);
ObjectInput input = new ObjectInputStream(new FileInputStream(file));
TranDemo demo = (TranDemo) input.readObject();
System.out.println("用户名:" + demo.getUsername() + "密码:"
+ demo.getPassword());
}
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;
}
}
输出结果为:
用户名:null密码:admin
在上面的例子中,我将pasword属性前添加关键字transient,我们看到虽然我们序列化的对象transient的属性值为“administrator”,但是当我们反序列化之后发现这个属性为null,说明这个属性没有进行序列化。
总结:
transient //属性不需要被序列化的时候
@Transient //不跟数据库表做映射 就是表中没有这个字段。