Hibernate自动生成实体类注解
用MyEclipse自动生成hibernate映射文件和实体类

⽤MyEclipse⾃动⽣成hibernate映射⽂件和实体类
建web⼯程,使⽤Hibernate的时候,在⼯程⾥⼀个⼀个创建实体类和映射⽂件太⿇烦,特别是⼤项⽬,好⼏百张表,每个表跟每个表的对应关系很负责,⼀张表中可能有超级多的字段,浪费时间,还容易出错!
创建完成后还要将⼀个个的映射⽂件配置到hibernate.cfg.xml中,稍微疏忽就会出错!
现在教⼤家如何⽤MyEclipse⾃动⽣成Hibernate映射⽂件及实体类
感叹⼀句MyEclipse插件的强⼤之处!
⽤到的⼯具:
1、MyEclipse2014
2、MySQL 5.5(oracle10g)
注:MySQL 和oracle的⽅法⼀样,只是在创建数据库连接的地⽅需要注意Connection URL的写法不同,这⾥我以mysql为例!
准备⼯作:(如果你的项⽬中已经有hibernate配置⽂件,并且有数据库连接的话,可以省略准备⼯作直接进⾏第三步)
1.新建⼀个web project ,选中项⽬右击
2.创建⼀个数据库,并且在数据库中添加若⼲表。
准备⼯作做好以后,我来⼿把⼿教接下来的步骤:
第⼀步:
这⾥我们创建了⼀个数据库student,⾥⾯有⼀张学⽣表(student)
第⼆步:创建⼀个数据库连接,如果已经有数据库连接并且已经有hibernate的配置⽂件的话,这⼀步可以省略
第三步:⽣成实体类和映射⽂件
完成后,可以在指定位置找到⽣成的映射⽂件和实体类对象了!。
HibernateTool_自动生成JPA实体

HibernateTool_自动生成JPA实体开发向导描述修改记录开发向导描述 (1)修改记录 (1)1开发向导概要 (3)1.1向导适用范围 (3)1.2开发涉及的技术 (3)1.3开发使用工具和版本 (3)1.4 开发环境以及操作步骤 (4)1.4.1 安装Hibernate Tools (4)方法1 下载插件后安装Hibernate插件 (4)方法2 自动安装Hibernate插件 (7)1.4.2 新建工程配置及生成实体 (8)1.4.2.1 新建java工程配置相关包 (8)1.4.2.2 创建Hibernate configuration File (11)1.4.2.3 创建Hibernate Console Configuration (13)1.4.2.4 创建Hibernate Reverse Engineering File(reveng.xml) (14)1.4.2.5 创建实体 (16)1.5 将生成的实体用户开发 (23)1.5. 1 复制实体到项目的源目录下 (24)1.5.2 修改实体 (26)1.5.2.1 关注1:实现的接口改变 (26)1.5.2.2 关注2:按照情况可以去掉集合类属性(不是必须) (27)1.5.2.3 关注3:主键生成原则 (27)1.5.2.4 关注4:删掉不必要的构造方法(不是必须) (29)1.5.2.5 关注5:在hibernate.cfg.xml中增加实体的引用,增加后spring将接管实体的生命周期。
(31)1开发向导概要在eclipse3.2种集成hibernateT ools,自动生成JPA实体。
1.1向导适用范围向导适用的人群是项目中Web开发者,以及相关测试和管理人员。
1.2开发涉及的技术采用Java技术进行项目的开发,选择技术框架主要是目前流行的开源的技术架构。
Spring2.5Struts2.12Hibernate3.2或者3.31.3开发使用工具和版本Eclipse3.5 + hibernatetools(eclipse plugin)Tomcat6.0.18Jdk6Postgresql8.3RC1.4 开发环境以及操作步骤准备好eclipse3.2【3.2~3.6均可】,建议使用3.2.1.4.1 安装Hibernate Tools方法1 下载插件后安装Hibernate插件把插件放到eclipse目录下面在eclipse目录下面新建links文件夹新增一个文件hibernatetools.link内容如下:path = E:/eclipse/subeclipse_hibernateTools重启eclipse即可。
JPA实体注解与Hibernate主键生成策略(13种)

∙∙∙∙关注此空间 964zyz2012-01-13 09:31JPA实体注解与hibernate主键生成策略用hibernate注解开发项目,对于主键的生成策略有些模糊,下面是从新浪网里面看到的一篇关于hibernate注解以及主键生成策略的文章,值得一看:1. 实体标志:@Entity@Indexed(index="group")@Table(name="GROUP_LAYMOD")* @Indexed 标识需要进行索引的对象,* 属性 : index 指定索引文件的路径 @DocumentId 用于标示实体类中的唯一的属性保存在索引文件中,是当进行全文检索时可以这个唯一的属性来区分索引中其他实体对象,一般使用实体类中的主键属性* @Field 标注在类的get属性上,标识一个索引的Field属性 : index 指定是否索引,与Lucene相同store 指定是否索引,与Lucene相同name 指定Field的name,默认为类属性的名称analyzer 指定分析器在hibernate注解主键的时候,一般会使用到这两个。
@GeneratedValue的作用是JPA的默认实现自定义主键生成策略@GenericGenerator是hibernate在JPA的基础上增强。
自定义主键生成策略,由@GenericGenerator实现。
hibernate在JPA的基础上进行了扩展,可以用一下方式引入hibernate独有的主键生成策略,就是通过@GenericGenerator加入的。
比如说,JPA标准用法@Id@GeneratedValue(GenerationType.AUTO)就可以用hibernate特有以下用法来实现@GeneratedValue(generator = "paymentableGenerator")@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")@GenericGenerator的定义:@Target({PACKAGE, TYPE, METHOD, FIELD})@Retention(RUNTIME)public @interface GenericGenerator {String name();String strategy();Parameter[] parameters() default {};}name属性指定生成器名称。
Hibernate自动生成实体类注解

在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准。
它非常强大、灵活,而且具备了优异的性能。
在本文中,我们将了解如何使用Java 5 注释来简化Hibernate代码,并使持久层的编码过程变得更为轻松。
传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载。
在最近发布的几个Hibernate版本中,出现了一种基于 Java 5 注释的更为巧妙的新方法。
借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java 类中,并提供一种强大及灵活的方法来声明持久性映射。
即利用hibernate注解后,可不用定义持久化类对应的*.hbm.xml文件,直接以注解方式写入在持久化类中来实现。
Hibernate annotation使用了ejb JPA的注解,所以,下面安装配置hibernate annotation环境时,需要导入ejb的包。
许多网上的资料都是jpa hibernate annotation方面的资料。
常用的hibernate annotation标签如下:@Entity --注释声明该类为持久类。
将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的, 要用下面的Transient来注解.@Table(name="promotion_info") --持久性映射的表(表名="promotion_info).@Table是类一级的注解,定义在@Entity下,为实体bean映射表,目录和schema的名字,默认为实体bean的类名,不带包名.@Id--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。
关于使用maven hibernate Plugin 生成java实体类使用

关于使用maven hibernate Plugin 生成java实体类使用maven hibernate Plugin 主要有6种功能∙hibernate3:hbm2cfgxml: Generates hibernate.cfg.xml∙hibernate3:hbm2ddl: Generates database schema.∙hibernate3:hbm2doc : Generates HTML documentation for database schema∙hibernate3:hbm2hbmxml: Generates a set of hbm.xml files∙hibernate3:hbm2java: Generates Java classes from set of *.hbm.xml files∙hibernate3:hbmtemplate: Renders arbitrary templates against Hibernate Mapping information这里主要介绍hibernate3:hbm2java这个功能如何使用它生成java实体类,使用这个插件的前置条件是首先配置好hibernate.cfg.xml这个文件,配置结果如下所示:<?xml version="1.0"encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><propertyname="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</pr operty><propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prope rty><property name="ername">root</property><property name="hibernate.connection.password"></property><propertyname="hibernate.connection.url">jdbc:mysql://localhost/cityhome?useUn icode=true&characterEncoding=GBK&autoReconnect=true</property ><property name="hibernate.connection.shutdown">true</property></session-factory></hibernate-configuration>然后配置pom文件中的信息,如下所示:<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>hibernate3-maven-plugin</artifactId><version>2.2</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>3.1.11</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2</version></dependency></dependencies><configuration><components><component><name>hbm2java</name><outputDirectory>src/main/java/</outputDirectory><implementation>jdbcconfiguration</implementation></component></components><componentProperties><configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile><ejb3>true</ejb3><packagename>model</packagename></componentProperties></configuration></plugin></plugins></build>对POM配置文件一些重要配置进行简单的说明:>h ibernate3-maven-plugin这个主要依赖mysql驱动(如果是mysql数据库类型,取决于连接的数据库)和cglib包(主要用于反向控制)<component><name/><component>是maven插件的goal的名称,在maven hibernate插件中主要有hbm2cfgxml、hbm2ddl、hbm2doc、hbm2hbmxml、hbm2java、hbmtemplate 等6种。
idea自动生成hibernate实体类

idea⾃动⽣成hibernate实体类1. DataBase -> + -> Data Source -> MySQL2. 填写 host、port、URL等信息后 -> TestConection(注:第⼀次测试连接需先安装插件)测试连接:成功 3.4.添加hibernate配置⽂件<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD//EN""/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 主要三部分配置--><!-- 1.配置数据库信息,必须的--><property name="connection.url">jdbc:mysql://192.168.0.108:3306/ecai?serverTimezone=Asia/Shanghai</property> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property><property name="ername">root</property><property name="connection.password">root</property><!-- 2.配置hibernate信息,可选的--><!-- 输出底层的sql语句--><property name="hibernate.show_sql">true</property><!-- 对底层sql进⾏格式化--><property name="hibernate.format_sql">true</property><!--配置数据的⽅⾔,如mysql中limitoracle的rownum--><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.current_session_context_class">thread</property><!-- 3.把映射⽂件配置到核⼼⽂件中,必须的--></session-factory></hibernate-configuration>hibernate.cfg.xml5. 添加hibernate配置⽂件成功后,左下⾓将出现 Persistence窗⼝,右击第⼀⾏的项⽬名6. 7.例:⽣成后的实体类package orm.entity;import javax.persistence.*;import java.math.BigDecimal;/*** <p>** </p>** @author: zeng* @since: 2020-03-26*/@Entity@Table(name = "merchant", schema = "ecai", catalog = "") public class MerchantEntity {private int id;private String code;private String account;private String password;private String nickname;private BigDecimal balance;private int status;private int roleId;private String secretKey;private String registTime;private String loginTime;private String loginIp;private String loginPlat;private String ips;private String phone;private String email;private String qq;private String wechat;@Id@Column(name = "id")public int getId() {return id;}public void setId(int id) {this.id = id;}@Basic@Column(name = "code")public String getCode() {return code;}public void setCode(String code) {this.code = code;}@Basic@Column(name = "account")public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}@Basic@Column(name = "password")public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Basic@Column(name = "nickname")public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}@Basic@Column(name = "balance")public BigDecimal getBalance() {return balance;}public void setBalance(BigDecimal balance) {this.balance = balance;}@Column(name = "status")public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}@Basic@Column(name = "role_id")public int getRoleId() {return roleId;}public void setRoleId(int roleId) {this.roleId = roleId;}@Basic@Column(name = "secret_key")public String getSecretKey() {return secretKey;}public void setSecretKey(String secretKey) {this.secretKey = secretKey;}@Basic@Column(name = "regist_time")public String getRegistTime() {return registTime;}public void setRegistTime(String registTime) {this.registTime = registTime;}@Basic@Column(name = "login_time")public String getLoginTime() {return loginTime;}public void setLoginTime(String loginTime) {this.loginTime = loginTime;}@Basic@Column(name = "login_ip")public String getLoginIp() {return loginIp;}public void setLoginIp(String loginIp) {this.loginIp = loginIp;}@Basic@Column(name = "login_plat")public String getLoginPlat() {return loginPlat;}public void setLoginPlat(String loginPlat) {this.loginPlat = loginPlat;}@Basic@Column(name = "ips")public String getIps() {return ips;}public void setIps(String ips) {this.ips = ips;}@Basic@Column(name = "phone")public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Basic@Column(name = "email")public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Basic@Column(name = "qq")public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}@Basic@Column(name = "wechat")public String getWechat() {return wechat;}public void setWechat(String wechat) {this.wechat = wechat;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;MerchantEntity that = (MerchantEntity) o;if (id != that.id) return false;if (status != that.status) return false;if (roleId != that.roleId) return false;if (code != null ? !code.equals(that.code) : that.code != null) return false;if (account != null ? !account.equals(that.account) : that.account != null) return false;if (password != null ? !password.equals(that.password) : that.password != null) return false;if (nickname != null ? !nickname.equals(that.nickname) : that.nickname != null) return false;if (balance != null ? !balance.equals(that.balance) : that.balance != null) return false;if (secretKey != null ? !secretKey.equals(that.secretKey) : that.secretKey != null) return false;if (registTime != null ? !registTime.equals(that.registTime) : that.registTime != null) return false;if (loginTime != null ? !loginTime.equals(that.loginTime) : that.loginTime != null) return false;if (loginIp != null ? !loginIp.equals(that.loginIp) : that.loginIp != null) return false;if (loginPlat != null ? !loginPlat.equals(that.loginPlat) : that.loginPlat != null) return false;if (ips != null ? !ips.equals(that.ips) : that.ips != null) return false;if (phone != null ? !phone.equals(that.phone) : that.phone != null) return false;if (email != null ? !email.equals(that.email) : that.email != null) return false;if (qq != null ? !qq.equals(that.qq) : that.qq != null) return false;if (wechat != null ? !wechat.equals(that.wechat) : that.wechat != null) return false;return true;}@Overridepublic int hashCode() {int result = id;result = 31 * result + (code != null ? code.hashCode() : 0);result = 31 * result + (account != null ? account.hashCode() : 0);result = 31 * result + (password != null ? password.hashCode() : 0);result = 31 * result + (nickname != null ? nickname.hashCode() : 0);result = 31 * result + (balance != null ? balance.hashCode() : 0);result = 31 * result + status;result = 31 * result + roleId;result = 31 * result + (secretKey != null ? secretKey.hashCode() : 0);result = 31 * result + (registTime != null ? registTime.hashCode() : 0);result = 31 * result + (loginTime != null ? loginTime.hashCode() : 0);result = 31 * result + (loginIp != null ? loginIp.hashCode() : 0);result = 31 * result + (loginPlat != null ? loginPlat.hashCode() : 0);result = 31 * result + (ips != null ? ips.hashCode() : 0);result = 31 * result + (phone != null ? phone.hashCode() : 0);result = 31 * result + (email != null ? email.hashCode() : 0);result = 31 * result + (qq != null ? qq.hashCode() : 0);result = 31 * result + (wechat != null ? wechat.hashCode() : 0);return result;}}Bean。
Hibernate实现(注解方式)

Hibernate实现(注解方式)注解方式:注解的方式与xml很很多类似:首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jarejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar下面是不同的地方:(1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:即把:<mapping resource="com/wsw/hibernate/model/Person.hbm.xml"/>改为:<mapping class="com.wsw.hibernate.model.Teacher" />(2):获取SessionFactory方式发生了变化:即:由SessionFactory sf = new Configuration().configure().buildSessionFactory()改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()(3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。
而采用在实体类中进行注解。
注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。
不能部分注解在属性前,部分注解在方法前。
(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。
(3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。
(4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。
JPA-注解-hibernate-cfg创建表

JPA(Java Persistence API)是Sun官方提出的java持久化规范,它只是一个规范不是一个产品,Hibernate已经是一个产品了。
使用Hibernate我们的劣势就是和这个框架结合的太机密了。
数据库开发的过程有两种过程的:1.先建表:根据数据库表编写配置文件的实体bean。
2.先编写文件和实体bean。
然后在生成表。
一、个人编写简单生成数据库表创建web project,名称JPAProjectjar包:src目录下创建META-INF文件夹存放持久化文件:persistence.xmlJPA 规范要求,配置文件必须命名为persistence.xml,并存在于类路径下的META-INF 目录中。
该文件通常包含了初始化JPA 引擎所需的全部信息。
<?xml version="1.0"?><persistence xmlns=""xmlns:xsi=""xsi:schemaLocation="" version="1.0"><persistence-unit name="yx"transaction-type="RESOURCE_LOCAL"><!-- 事物的类型,这里的实物类型是本地实物类型 --><provider>org.hibernate.ejb.HibernatePersistence</provider><properties><property name="hibernate.dialect"value="org.hibernate.dialect.MySQL5Dialect"/><!--数据库方言--><property name="hibernate.connection.driver_class"value="com.mysql.jdbc.Driver"/><!--数据库驱动类--><property name="ername"value="root"/><!--数据库用户名--><property name="hibernate.connection.password"value="yx"/><!--密码--><property name="hibernate.connection.url"value="jdbc:mysql://localhost:3306/test"/><!--数据库连接URL--> <property name="hibernate.max_fetch_depth"value="3"/><!--外连接抓取树的最大深度 --><property name="hibernate.hbm2ddl.auto"value="update"/><!-- 自动输出schema创建DDL语句 --><property name="hibernate.jdbc.fetch_size"value="18"/><!-- JDBC 的获取量大小 --><property name="hibernate.jdbc.batch_size"value="10"/><!-- 开启Hibernate使用JDBC2的批量更新功能 --><property name="hibernate.show_sql"value="true"/><!-- 在控制台输出SQL语句 --></properties></persistence-unit><!--Oracle --><!--<persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> <provider>oracle.toplink.essentials.PersistenceProvider</provider><exclude-unlisted-classes>false</exclude-unlisted-classes><properties><property name="toplink.logging.level" value="INFO"/><property name="toplink.jdbc.driver"value="oracle.jdbc.OracleDriver"/><property name="toplink.jdbc.url"value="jdbc:oracle:thin:@myhost:l521:MYSID"/><property name="toplink.jdbc.password" value="tiger"/><property name="er" value="scott"/></properties></persistence-unit>--></persistence>注:hibernate.hbm2ddl.autovalidate加载hibernate时,验证创建数据库表结构create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7、@Transient 可选 @Transient 表示该属性并非一个到数据库表的字段的映射,ORM 框架将忽略该属性. 如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM 框架 默认其注 解为@Basic 示例:
//根据 birth 计算出 age 属性 @Transient public int getAge() {
常用的 hibernate annotation 标签如下:
@Entity
--注释声明该类为持久类。将一个 Javabean 类声明为一 个实体的数据库
表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若
在类中,添加另外属性,而非映射来数据库的, 要用下面的 Transient 来注解.
@Temporal(TemporalType.TIMESTAMP)--声明时间格式
@Enumeon
--声明添加对乐观锁定的支持
@OneToOne
--可以建立实体 bean 之间的一对一的关联
@OneToMany
--可以建立实体 bean 之间的一对多的关联
@ManyToOne
sequenceName="S_Teacher")
5、@Basic(fetch=FetchType,optional=true)
可选
@Basic 表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的 getXxxx() 方法,默认 即为@Basic
fetch: 表示该属性的读取策略,有 EAGER 和 LAZY 两种,分别表示主支抓取和延迟加载, 默认为
例如,实体 Order 有一个 user 属性来关联实体 User,则 Order 的 user 属性为一个外键, 其默认的名称为实体 User 的名称+下划线+实体 User 的主键名称 示例:
见@ManyToOne
10、@OneToMany(fetch=FetchType,cascade=CascadeType) 可选 @OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字 段. fetch:表示抓取策略,默认为 ZY,因为关联的多个对象通常不必从数据库 预先读取 到内存 cascade:表示级联操作策略,对于 OneToMany 类型的关联非常重要,通常该实体更新或删 除时,其 关联的实体也应当被更新或删除 例如:实体 User 和 Order 是 OneToMany 的关系,则实体 User 被删除时,其关联的实体 Order 也应该 被全部删除 示例:
catalog:可选,表示 Catalog 名称,默认为 Catalog("").
schema:可选,表示 Schema 名称,默认为 Schema("").
3、@id
必须
@id 定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.置于 getXxxx ()前.
4、@GeneratedValue(strategy=GenerationType,generator="") 可选
--可以建立实体 bean 之间的多对一的关联
@ManyToMany
--可以建立实体 bean 之间的多对多的关联
@Formula
--一个 SQL 表达式,这种属性是只读的,不在数据库生成属性(可以使
用 sum、average、max 等)
@OrderBy
--Many 端某个字段排序(List)
Hibernate 注解详细说明
return getYear(new Date()) - getYear(birth); }
8、@ManyToOne(fetch=FetchType,cascade=CascadeType) 可选
@ManyToOne 表示一个多对一的映射,该注解标注的属性通常是数据库表的外键 optional:是否允许该字段为 null,该属性应该根据数据库表的外键约束来确定,默认为 true fetch:表示抓取策略,默认为 FetchType.EAGER cascade:表示默认的级联操作策略,可以指定为 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若 干组合,默认为无级联操作 targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM 框架根据属性类 型自动判 断 targetEntity. 示例:
在过去几年里,Hibernate 不断发展,几乎成为 Java 数据库持久性的事实标准。它非常强大、灵活,
而且具备了优异的性能。在本文中,我们将了解如何使用 Java 5 注释来简化 Hibernate 代码,并使
持久层的编码过程变得更为轻松。
传统上,Hibernate 的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在
User 实体表示用户,Book 实体表示书籍,为了描述用户收藏的书籍,可以在 User 和 Book 之间 建立 ManyToMany 关联
@Entity public class User {
private List books;
@ManyToMany(targetEntity=package.Book.class) public List getBooks() {
@OneTyMany(cascade=ALL) public List getOrders() {
return orders; }
11、@OneToOne(fetch=FetchType,cascade=CascadeType)
可选 @OneToOne 描述一个一对一的关联 fetch:表示抓取策略,默认为 ZY cascade:表示级联操作策略 示例:
//订单 Order 和用户 User 是一个 ManyToOne 的关系 //在 Order 类中定义 @ManyToOne() @JoinColumn(name="USER") public User getUser() {
return user; }
9、@JoinColumn 可选 @JoinColumn 和@Column 类似,介量描述的不是一个简单字段,而一一个关联字段,例如. 描述一个 @ManyToOne 的字段. name:该字段的名称.由于@JoinColumn 描述的是一个关联字段,如 ManyToOne,则默认的 名称由 其关联的实体决定.
strategy:表示主键生成策略,有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种,分别表示让 ORM 框架自动选择,
根据数据库的 Identity 字段生成,根据数据库表的 Sequence 字段生成,以有根据一个额 外的表生 成主键,默认为 AUTO
generator:表示主键生成器的名称,这个属性通常和 ORM 框架相关,例如,Hibernate 可 以指定 uuid 等主键生成方式.
@GeneratedValue --定义自动增长的主键的生成策略.
@Transient
--将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久
类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行
transient 的注解.否则系统会因映射不到数据表相应字段而出错.
EAGER. optional:表示该属性是否允许为 null,默认为 true 示例:
@Basic(optional=false) public String getAddress() {
return address; }
6、@Column 可选 @Column 描述了数据库表中该字段的详细定义,这对于根据 JPA 注解生成数据库表结构 的工具非常 有作用. name:表示数据库表中该字段的名称,默认情形属性名称一致 nullable:表示该字段是否允许为 null,默认为 true unique:表示该字段是否是唯一标识,默认为 false length:表示该字段的大小,仅对 String 类型的字段有效 insertable:表示在 ORM 框架执行插入操作时,该字段是否应出现 INSETRT 语句中,默认 为 true updateable:表示在 ORM 框架执行更新操作时,该字段是否应该出现在 UPDATE 语句中,默 认为 true.对于一经创建就不可以更改的字段,该属性非常有用,如对于 birthday 字段. columnDefinition:表示该字段在数据库中的实际类型.通常 ORM 框架可以根据属性类型 自动判 断数据库中字段的类型,但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是
即利用 hibernate 注解后,可不用定义持久化类对应的*.hbm.xml 文件,直接以注解方式写入在持久
化类中来实现。
Hibernate annotation 使用了 ejb JPA 的注解,所以,下面安装配置 hibernate annotation 环境时,
需要导入 ejb 的包。许多网上的资料都是 jpa hibernate annotation 方面的资料。
@OneToOne(fetch=ZY) public Blog getBlog() {
return blog; }
12、@ManyToMany 可选 @ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在 ManyToMany 描述 中,中间表是由 ORM 框架自动处理 targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class mappedBy:表示多对多关联的另一个实体类的对应集合属性名称 示例:
启动时进行加载。