hibernate之annotation

首先介绍些常用的Annotation注解:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值