一,首先需要导入支持注解开发的jar包:

hibernate-annotations.jar

hibernate-commons-annotations.jar (Hibernate中支持注解开发的jar包)

ejb3-persistence.jar(API规范的jar包)

slf4j/slf4j-api-1.5.0.jar

slf4j-log4j12-1.5.0.jar

log4j-1.2.15.jar  (支持日志输出的jar包,注意版本的匹配)

二,在Hibernate框架进行注解开发时,主要是代替实体和数据表的映射文件,而核心配置文件中的,数据库的连接等等,还是需要xml配置文件,进行配置的。先看一下Hibernate中常用的注解:

1,@Entity : 表示当前的类为实体类,声明在类的前面。可以将当前类和数据库的表和字段进行关联映射。

2,@Table:表示映射的表,声明在类的前面

3,@Id:表示主键的映射,声明在主键的get方法前边,默认情况下主键利用assigned(用户提供)生成策略。如果想要设置API规范提供了四种主键生成策略:

@GeneratedValue(strategy=GenerationType.AUTO)      相当于Hibernate框架的native主键生成策略

@GeneratedValue(strategy=GenerationType.IDENTITY)  相当于Hibernate框架的identity主键生成策略,适用于MySQL,SQL Server

@GeneratedValue(strategy=GenerationType.SEQUENCE)  相当于Hibernate框架的sequence主键生成策略,适用于Oracle,DB2

@GeneratedValue(strategy=GenerationType.TABLE)     使用一张单表管理主键值。

默认情况下API规范是不支持Hibernate框架中的uuid的主键生成策略,假如我们想要使用,需要我们进行增加主键生成器,如下:

@GenericGenerator(name="hibernate-uuid",strategy="uuid")

@GeneratedValue(generator="hibernate-uuid")

4,@Column : 表示映射属性,和表的字段进行关联

5,@ManyToOne : 表示映射关系中的多对一

6,@JoinColumn : 表示外键映射属性,和表的外键字段进行关联

7,@OneToMany : 表示映射关系中的一对多,这里需要注意,一对多时,外键的维护需要翻转交给多的一方进行维护,需要配置反转属性mappedBy,属性取值为多的一方的映 射属性名称。相当于xml配置文件中的Inverse="true"。

8,@OrderBy : 表示排序字段

9,@Transient : 表示声明瞬时属性,不和数据库的字段发生关联,也就是没有表中列与之映射。

等等吧,其实我感觉这些属性和xml配置文件属性都是一一对应的,及时不一样,也会有与之类似的属性进行实现其功能,所以我们可以对比着使用。当然这里只是一些常用的,当我们需要时还需要我们查看文档进行编写。

三,看一个简单的利用主键开发的实体类吧,这里就不需要我们再编写配置文件了:

package com.lianpay.ams.business.pojo;

import java.io.Serializable;
import java.util.List; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table; import org.codehaus.jackson.annotate.JsonIgnore; import com.lianpay.ams.business.enums.AMSEnums.*; /**
* 硬件设备实体类
* @author chensy
*
*/ @Entity
@Table(name = "dev_detail")
public class DevDetail implements Serializable { /**
*
*/
private static final long serialVersionUID = 1L; @Id
@Column(name = "dev_serialNO", length = 20)
private String devSerialNo; //设备序列号 @Column(name = "dev_IPAddr", length = 20)
private String devIPAddr; //IP地址 @Column(name = "dev_type", length = 1)
@Enumerated(EnumType.ORDINAL)
private DevType devType; //类型 @Column(name = "mem_info", length = 20)
private String memInfo; //内存信息 @Column(name = "disk_info", length = 20)
private String diskInfo; //硬盘信息 @Column(name = "up_time", length = 10)
private String upTime; //上架时间 @Column(name = "os_info", length = 20)
private String osInfo; //操作系统 @JsonIgnore
@Column(name = "net_area", length = 20)
@Enumerated(EnumType.STRING)
private NetArea netArea; //网络区域 @Column(name = "phy_area", length = 20)
private String phyArea; //物理区域 @Column(name = "cpu_info", length = 20)
private String cpuInfo; //CPU信息
//状态
@Column(name = "dev_status", length = 1)
@Enumerated(EnumType.ORDINAL)
private Status devStatus = Status.NORMAL; @JsonIgnore
@OneToMany(targetEntity = HostDetail.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "dev_serialNO")
private List<DevDetail> devDetails; public String getDevSerialNo() {
return devSerialNo;
}
public void setDevSerialNo(String devSerialNo) {
this.devSerialNo = devSerialNo;
}
public String getDevIPAddr() {
return devIPAddr;
}
public void setDevIPAddr(String devIPAddr) {
this.devIPAddr = devIPAddr;
}
public String getMemInfo() {
return memInfo;
}
public void setMemInfo(String memInfo) {
this.memInfo = memInfo;
}
public String getDiskInfo() {
return diskInfo;
}
public void setDiskInfo(String diskInfo) {
this.diskInfo = diskInfo;
}
public String getUpTime() {
return upTime;
}
public void setUpTime(String upTime) {
this.upTime = upTime;
}
public String getOsInfo() {
return osInfo;
}
public void setOsInfo(String osInfo) {
this.osInfo = osInfo;
}
public String getPhyArea() {
return phyArea;
}
public void setPhyArea(String phyArea) {
this.phyArea = phyArea;
}
public String getCpuInfo() {
return cpuInfo;
}
public void setCpuInfo(String cpuInfo) {
this.cpuInfo = cpuInfo;
}
public List<DevDetail> getDevDetails() {
return devDetails;
}
public void setDevDetails(List<DevDetail> devDetails) {
this.devDetails = devDetails;
}
public Status getDevStatus() {
return devStatus;
}
public void setDevStatus(Status devStatus) {
this.devStatus = devStatus;
}
public DevType getDevType() {
return devType;
}
public void setDevType(DevType devType) {
this.devType = devType;
}
public NetArea getNetArea() {
return netArea;
}
public void setNetArea(NetArea netArea) {
this.netArea = netArea;
}
}

四,当然用了注解的开发方式,我们的核心配置文件就需要我修改了,这里就需要Hibernate的AnnotationSessionFactoryBean工厂类了,

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 配置自动扫描包下的实体,也可使用annotatedClasses属性进行单个实体配置-->
<property name="packagesToScan">
<list>
<value>com.lianpay.ams.*</value>
</list>
</property>
<!-- 配置Hibernate属性 -->
<property name="hibernateProperties">
<props>
//...省略。。。
</props>
</property>
</bean>

我所了解的Hibernate注解的更多相关文章

  1. Hibernate注解----关联映射注解以及课程总结详解----图片版本

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  2. Hibernate注解----类级别注解以及属性注解详解----图片版本

    这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...

  3. hibernate注解随笔—10月8日

    hibernate注解(herbinate4 jar包注解可用,使用hibernate3.3注解失败) 如果javabean与数据库中表名一致(不区分大小写),则注解不用写@Table(name=&q ...

  4. Hibernate注解使用以及Spring整合

    Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...

  5. Hibernate注解映射联合主键的三种主要方式

    今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...

  6. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  7. Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:

    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...

  8. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  9. Hibernate注解错误之- org.hibernate.MappingException: Could not determine type for:

    Hibernate 注解 @OneToOne 时候,出现以下错误,经调试,发现 注解要么全部放在字段上,要么全部放在get方法上,不能混合使用! org.hibernate.MappingExcept ...

  10. Hibernate 注解 没有加@Column一样会在数据库创建这些字段

    Hibernate 注解 没有加@Column一样会在数据库创建这些字段 如下一个注解类: package com.hyy.hibernate.one_to_many.domain; import j ...

随机推荐

  1. 使用datepicker日期插件

    使用datepicker日期插件 在引入<jquery.js> <bootstrap.js><datepicker.js>之后 引用<bootstrap.cs ...

  2. c# 输入姓名直到输入的是quit时,停止输入然后显示出输入的姓名个数及姓名

    1.输入姓名直到输入的是quit时(不区分大小写),停止输入然后显示出输入的姓名个数及姓名: 要求结果如下图所示: class Program { static void Main(string[] ...

  3. 国际化SEO优化的最佳实践

    作者:Kristopher Jones 翻译 :吴祺深 欢迎访问网易云社区,了解更多网易技术产品运营经验. 让我们来说一下hreflang属性.如果你还没有关掉这个页面,那么你已经完成了这个教程最重要 ...

  4. 【ZOJ2314】Reactor Cooling(有上下界的网络流)

    前言 话说有上下界的网络流好像全机房就我一个人会手动滑稽,当然这是不可能的 Solution 其实这道题目就是一道板子题,主要讲解一下怎么做无源无汇的上下界最大流: 算法步骤 1.将每条边转换成0~u ...

  5. jqury的ajax

    前端代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  6. C++派生类与基类对象赋值情况

    一 .普通赋值 (同名隐藏) 子类对象调用和父类相同的函数名,该父类的函数名会被隐藏,只会调用子类的函数. Class A { public: void show(); void show(int); ...

  7. 聊聊并发(三)Java线程池的分析和使用

    1.    引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立即执行. ...

  8. IO概述、异常、File文件类_DAY19

    IO概述: 操作数据的工具 IO流,即数据流,数据像水流一样通过IO工具进行传输. 程序  <IO>   硬盘 绝对路径与相对路径 1:异常(理解) (1)就是程序的非正常情况. 异常相关 ...

  9. androidStudio 打包与混淆

    在gradle中通过makeJar打包 不同模块的gradle都支持打包功能,application module的build.gradle中引入的是com.android.application插件 ...

  10. java多线程_01_线程的基本概念

    线程:一个程序里边不同的执行路径 例子程序:这个例子程序是一条执行路径.这个程序只有一个分支,就是main方法,叫主线程 public static void main(String[] args) ...