hibernate之annotation
来源:互联网 发布:python遍历字符串 编辑:程序博客网 时间:2024/05/16 07:04
1. 当表名与类名不一致:
@Table(name="数据库表名") (javax.persistence) 如果类名与表名相同可以不用写
2. 当字段名与属性不同:
@Column(name="_name") ,相同的话使用@Basic ,@Base 默认可以不写;
3. 设置属性不参与持久化到数据库中:
@Transient
4. 映射时期与时间类型,指定时间精度:
属性一般使用 java.util.data,而不是sql.data!默认数据库则使用 datetime 类型存储属性data;
不设定精度,数据库默认日期和时间都保存!
Annotation中的名字为value=xx,value 可以省略不写
只想保存日期:(数据库字段类型对应 data)
@Temporal(value=TemporalType.DATE) @Temporal(value=TemporalType.DATE)
只想保存时间:(数据库字段类型对应 time)
@Temporal(value=TemporalType.TIME) @Temporal(TemporalType.TIME)
5. 映射枚举类型:
@Enumerated
如果你需要定义枚举类型,那么这样:
@Enumerated(EnumType.STRING) 字符串枚举类型
@Enumerated(EnumType.ORDINAL) 数序(数字)枚举类型(数据库存枚举的下标)
另外一块:字段映射位置放置在getXXX方法上,和放置在成员变量上都可以,但是建议放置getXXX方法上,因为我们的成员变量都是设置private,如果你映射位置放置在成员变量上,那将让Hibernate直接访问我们的私有变量,既然设置私有没必要希望Hibernate直接访问,破坏Java的封装性。
下面介绍Annotation中ID生成策略:
1. 手动指定;没说的之前写过,xml和属性都使用过;@Id
2. 使用 Generator 生成器;
Generator 有很多值:常用的有native , identity, sequence,uuid(id类型 String) ;
使用Generarot帮我们自动生成ID:
@GeneratedValue
注视在 @Id下:
@Id
@GeneratedValue
默认策略 auto/native ;如果你使用MySQL,那么自动使用 auto_increment
指定ID生成策略 @GeneratedValue
@GeneratedValue(strategy=GenerationType.AUTO) @GeneratedValue(strategy=GenerationType.IDENTITY) @GeneratedValue(strategy=GenerationType.SEQUENCE) @GeneratedValue(strategy=GenerationType.TABLE)
这里要注意要使用数据库支持的,比如这里MySQL我们使用IDENTITY ;
GenerationType.TABLE 主要用于跨数据库平台,很少用,标记下;
最后一块:联合主键
在使用Annotation使用联合主键有三种方式:
1. 将你的多个Primary Key放置一个新类中(主键类),并且用注解@Embeddable 声明主键类即可;实体类使用注解@Id指向主键类
2. 将你的多个Primary Key放置一个新类中(主键类),实体类使用注解@EmbeddedId指向主键类即可;
3. 实体类中在所有需要设置为主键的属性上都加入@Id注解,然后在注解实体类下面添加一个如下注解:
@IdClass(value=XXX.class) 这里的XXX对应你的主键类名
3种之中最适合的书写习惯的是第3种,但是第二种比较方便,也很常用;
但是不管哪一种使用方法,对于使用联合主键而言,你的主键类都需要使用Serializable接口,并且重写equals和hashCode函数;
Serializable接口 原因是:序列化就是为了能暂存一些对象到硬盘中;
重写equals函数 , 原因是:内存中的对象区分;
重写hashCode 函数, 原因是:根据哈希码快速索引;
package com.alibaba.corp.metrix.admin.biz.edi.model.domain.taobao; import java.io.Serializable; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.GenericGenerator; @Entity(name = "IfreeOrder") @Table(name = "metrix_ifree_order") public class IfreeOrder implements Serializable { @Transient private static final long serialVersionUID = -3466339962287852603L; @Id @GenericGenerator(name = "generator", strategy = "assigned") @GeneratedValue(generator = "generator") @Column(name = "id", unique = true, nullable = false) private String Id; // 发布id @Column(name = "subject") private String Subject; // 发布标题 @Column(name = "one_product_line") private String OneProductLine; // 一级产品线 @Column(name = "two_product_line") private String TwoProductLine; // 二级产品线 @Column(name = "team") private String Team; // 团队 @Column(name = "applies") private String Applys; // 应用,如果有多个,中间用英文逗号隔开 @Column(name = "pm") private String PM; // PM @Column(name = "pe") private String PE; // PE @Column(name = "qa") private String QA; // QA @OneToMany(mappedBy = "ifreeOrder", cascade = CascadeType.ALL) private List<IfreeOrderRelatedProject> ReleateProject; // 相关项目 @Column(name = "gmt_created") private Date gmtCreated = new Date(); // 本地数据库创建时间 public String getId() { return Id; } public void setId(String Id) { this.Id = Id; } public String getSubject() { return Subject; } public void setSubject(String Subject) { this.Subject = Subject; } public String getOneProductLine() { return OneProductLine; } public void setOneProductLine(String OneProductLine) { this.OneProductLine = OneProductLine; } public String getTwoProductLine() { return TwoProductLine; } public void setTwoProductLine(String TwoProductLine) { this.TwoProductLine = TwoProductLine; } public String getTeam() { return Team; } public void setTeam(String Team) { this.Team = Team; } public String getApplys() { return Applys; } public void setApplys(String Applys) { this.Applys = Applys; } public String getPM() { return PM; } public void setPM(String PM) { this.PM = PM; } public String getPE() { return PE; } public void setPE(String PE) { this.PE = PE; } public String getQA() { return QA; } public void setQA(String QA) { this.QA = QA; } public List<IfreeOrderRelatedProject> getReleateProject() { return ReleateProject; } public void setReleateProject(List<IfreeOrderRelatedProject> ReleateProject) { this.ReleateProject = ReleateProject; if (this.ReleateProject != null) { for (IfreeOrderRelatedProject ifreeOrderRelatedProject : this.ReleateProject) { ifreeOrderRelatedProject.setIfreeOrder(this); } } } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } }
本文出自 “李华明Himi” 博客,请务必保留此出处http://xiaominghimi.blog.51cto.com/2614927/969782
- hibernate 之 annotation
- hibernate之annotation
- 【Hibernate】入门搭建之Annotation
- hibernate annotation 之 注解声明
- hibernate annotation 之 注解声明
- hibernate annotation之主键生成策略
- Hibernate 使用 Annotation 之 联合主键
- Hibernate配置EhCache缓存之annotation注解
- hibernate annotation 之 主键生成策略
- Hibernate 使用Annotation之联合主键
- hibernate annotation 之 主键生成策略
- hibernate annotation 之 主键生成策略
- hibernate annotation 之 主键生成策略
- Hibernate级联关系OneToMany之 Annotation实现
- hibernate annotation 之 主键生成策略
- Hibernate Annotation之主键生成策略
- hibernate annotation 之mappedBy 与 @JoinColumn区别
- hibernate annotation 之 主键生成策略
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
- CString,int,string,char*之间的转换
- Oracle知识点总结—集合操作和序列
- 求数组(元素可为正数、负数、0)的最大子序列和。
- 编程珠玑 Chapter2 字符串翻转算法
- hibernate之annotation
- Node.js教学视频
- zoj1107FatMouse and Cheese (记忆化搜索)
- java虚拟机加载class的顺序
- opnet中仿真问题总结
- COM、ATL学习的几本书点评
- poj 1988 Cube Stacking
- 梦断代码 --一个程序员的自白(六)
- 编程是一场漫长的修行