解释
这个注解是hibernate框架的注解。它用于注释实体类、映射超类或可嵌入类的属性或字段。
文档中是这么说明的:
Specifies that the property or field is not persistent. It is used
to annotate a property or field of an entity class, mapped
superclass, or embeddable class.
Example:
@Entity
public class Employee {
@Id int id;
@Transient User currentUser;
...
}
简单来说:在实体类中,想要添加表中不存在的字段,就要使用@Transient这个注解了。
使用 @Transient 表示该属性并非是一个要映射到数据库表中的字段,只是起辅助作用,ORM框架将会忽略该属性。
- 简单查询情况下,hibernate会自动根据实体类对象的属性映射表字段时,使用 @Transient的属性会被忽略掉,解决未知字段等查询时异常等问题
- 当开启hibernate的自动建表功能时, 实体类添加新的属性时,并使用 @Transient注解时,hibernate就会自动忽略这个属性(字段),不会自动根据实体类对象更新表结构(其他未使用 @Transient注解的字段不受影响,该更新还是会更新)
使用
注解可以加在属性上;也可以加在**getXXX()**上面(但是我的放在get上报错,放在属性上可使用)
例如:
/**
* 用户表
*/
@Entity
@Table(name="t_user")
public class UserEntity extends AbstractEntity{
private static final long serialVersionUID = 8868175499339233168L;
/**
* 登录用户名
*/
@Column(name="user_name",unique=true)
private String userName;
/**
* 中文用户名
*/
@Column(name="user_name_cn")
private String userNameCn;
/**
* 密码
*/
@Column(name="password")
private String password;
/**
* 备注
*/
@Lob
@Column(name="remarks")
private String remarks;
/**
* 角色实体
* 数据库操作就会忽略掉这个属性
*/
@Transient
private RoleEntity roleInfo;
/**
* 此处省略了get/set 方法
*/
}
备注
- 可以跟java关键字中的transient这个关联,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化(串行化)过程。
- Hibernate支持自动建表的属性配置
在配置hibernate的配置文件中将hbm2ddl.auto的值设置为update
如:Xml代码<property name="hbm2ddl.auto">update</property>
create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。
update:表示自动根据实体类对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。
create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在。
validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
要注意的是:数据库要预先建立好,因为hibernate只会建表,不会建库!