- 浏览: 7330877 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在spring中需要进行特别的声明配置Annotation风格的SessionFactory.具体见SimpleSSHF的ApplicationContext.xml
@Entity将一个Javabean类声明为一个实体的数据库表映射类...也可以成为持久化POJO类,最好实现序列化
@Id注释为主键类的定义,定义在对应属性的get方法之上
@Table是类一级的注解,定义在@Entity下,为实体bean映射表,目录和schema的名字,默认为实体bean的类名,不带包名
其中uniqueConstraints能够结合@uniqueConstraint 进行列的唯一约束,多个
@Version 用于在实体类中添加对乐观锁的支持,定义在getVesion方法之上
@Basic 实体Bean中所有的非Static 非transient的属性都可以被持久化,没有定义注解属性的等价于在其上添加了@Basic注解
通过@Basic注解可以声明属性的获取策略(lazy与否),默认的是即时获取(early fetch),这里又讨论到了
延迟关联获取和延迟属性获取,通常不需要对简单属性设置延迟获取,如需要定义@Basic(fetch=FetchType.LAZY)
@Temporal 定义时间的精度(DATE,TIME,TIMESTAMP),例如@Temporal(TemporalType.DATE)
@Lob 持久化为Blob或者Clob类型,根据get方法的不同,自动进行Clob和Blob的转换,其中String为Blob,byte[]为Clob
@Cloum 将属性映射到列,就是把数据库列的约束带到JavaBean中.
updatable=false:不可更新,属性值是不可变的;
name="xx":映射的列名;
nullable=false;不能为空;
length=50:列的长度
...共10个属性
@Embeddable
@AttributeOverride 提供嵌入式对象的复写,即实体类中的其他实体类对象
@GeneratedValue 标识符(主键)的生成策略,配合@Id使用
使用SEQ_STORE配置的sequence生成器
@Id @GeneratedValue(strategy=GrnerationType.SEQUENCE,generator="SEQ_STORE")
使用identity生成器
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
其他情况下还包括了Auto,用于可移植的应用
多个id可以共享一个identifier生成器,使用@SequenceGenerator和@TableGenerator,可以配置
不同的identifier生成器,生成器的适用范围,可以是应用级和类一级.其中类一级可以覆盖应用
级.
应用级生成器定义在包一级,单独的java文件中
@javax.persistence.TableGenerator(...属性键值对)
@javax.persistence.SequenceGenerator(...)
比较常见的应该是类一级的sequence生成器
@Entity
@javax.persistence.SequenceGenerator{
name="SEQ_STORE",
sequenceName="my_seqence"}
然后在@GeneratedValue中的generator="SEQ_STORE"
定义组合主键的方法:有三种
1:将组件类朱杰伟@Embeddable,并将组件的属性注解为@Id
2:将组件的属性注解为@EmbeddedId
3:将类注解为@IdClass,并将该实体类中的所有属于主键的属性都注解为@Id
下面介绍@IdClass的用法
其中@Id都是定义在get方法之上,@IdClass(对应单独的主键类名字.class)
在本类中使用@Id定义需要建立联合主键的类,在主键类中只要定义对应的属性,以及get和set方法,并且使用相同的名字进行定义
这个是符合Ejb3标准
也可以使用Hibernate专门的方式.
定义原类级别的
@Entity
@AssociationOverride(name="id.channel",joinColumns=@JoinColumn(name="chan_id"))
@EmbededId public TvMa id....这个为主键类对象
主键类中
@Embeddable
@ManyToOne
public Chanel chanel
public String name;
@ManyToOne
public Presesenter presenter;
映射实体Bean的关联关系
一对一:就是主外键表中都只能存在唯一
分为三种情况. 1:共享一个主键
2:通过外键关联到另一个实体的主键.(必须在外键列增加唯一约束)
3:通过关联表来保存两个实体之间的链接关系(必须在外键列增加唯一约束)
一对一共享主键:使用@PrimaryKeyJoinColumn定义一对一关联,保证两个实体类的主键id相同,然后在一个类中
定义另外个类的get方法,并且设置@OneToOne(CasadeType.ALL)
二:使用外键列进行实体的关联
在主键类表中定义外键表的实体类get方法
然后设置
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="password_fk") ""中为主键列中外键列名
...外键表实体类的get方法
外键表实体类中
@OneToOne(mappedBy="passport")""中为主键表实体类中的属性名(主体的关联属性)
public ...主键表实体类get方法
其中@JoinColumn是可选的
多对一(Many-to-one)
使用@ManyToOne注解定义多对一
@ManyToOne(cascade=(CascadeType.PERSIST,CascadeType.MERGE),targetEntity=CompanyImpl.class)
@JoinColumn(name="COMP_ID")
...对应get方法..
其中@JoinColumn也是可选的
targetentity属性用于在接口作为返回值的时候,一般不需要设置
多对多的没有专门描述,应该放在了两个的关联表中进行了描述
集合类型的使用
使用OnetoMany 或者ManyToOne进行对应的设置,可以映射成对应的List集合,也可以使用泛型进行约束
@Entity
public class City{--------一方
@OneToMany(mappedBy="city")--外键实体类中的属性名
@OrderBy("streetName")-----外键实体类中的属性名
public List<Street> getStreets()....
}
在对应的Street类中-------多方
@ManyToOne
public City getCity()
{....}
关键是主要放定义List保存多方引用,使用OneToMany注解,其中可以使用@Order(外键表属性)
外表部分就是使用@ManyToOne 放置在主表实体类的get方法之上
一对多关系就是多对一. 因为是双向关联的
建立双向的关键,在多对一一方几乎总是双向关联中主体端,而一对多这端的关联注解为
@OneToMany(mappedBy=...) ...为外键表中的主表对象的属性名,这样外键表不必也不能再定义物理映射了
映射EJBQL/HQL查询(就是将HQL写在单独的类里面,然后进行直接的调用)
使用@NamedQuery和@NameQueries在类和包上的注释,在Session factory/Entity Manager factory范围中都可见
直接定义在包级别,不需要有class
@NamedQueries{
@javax.persistence.NamedQuery(name="plane.getall",query="select p from Plane p")
}
定义在类级别
@NameQuery(name="night.moreRecentThan",query="select n from Night n where n.data>=:data")
public class Night{...}
调用的方式
public class MyDao{
doStuff()
{
Query q = s.getNamedQuery("night.moreRecentThan");
q.setDate("date",值)
List result=q.list();
}
}
映射本地化的查询(就是使用普通SQL查询)
需要使用@SqlResultSetMapping注解描述resultset的结构,这样会进行结果集自动映射成对应的实体类
hibernate自带的Annotation,对Ejb的拓展
@Generated : 用于设置在插入和更新后的自动查询.
@OnDelete(action=OnDeleteAction.CASCADE):用于在删除时候,触发级联删除
延迟选项和获取模式,EJB3提供了Fetch选项,Hibernate提供了更丰富的选项集
@LazyToOne:定义了@ManyToOne和OneToOne关联的延迟选项
@LazyCollection:定义个@ManyToMany和@OneToMany关联的延迟选项,其中lazyCollectionOption 为true表示具有延迟性
Extra:集合具有延迟性,false用于关闭延迟加载
@Fetch: 定义了加载关联关系的获取策略.设置FethMode属性,SUBSELECT为子查询模式,JOIN会取消所有的延迟加载
关于集合类型的注解
@BatchSizebatch设置集合的batch大小
@Where注解设置Where子句
@Check来设置check子句
@OrderBy来设置SQL的Order by子句
@OnDelete(action=OnDeleteAction.CASCADE) 注解设置级联删除策略
@Sort(type=SortType.COMPARATOR,comparator=TicketComparator.class) 其中comparator用于比较器
更多的集合类型
@OneToMany(cascade=CascadeType.ALL);
@IndexColumn(name="表名",base=1);
public list<xx>...{};
如果忘记设置@IndexColumn,那会使用bag的形式返回数据,即允许重复元素的无需集合
缓存的使用,激活Hibernate的二级缓存
使用@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
usage: 给定缓存的并发策略
region:(可选的) 缓存范围
include(可选的) 值为all包括了所有属性,默认为all non-lazy为非延迟属性
Hibernate内置了数据验证
直接将注释定义在实体类的对应方法上
比如
@NotNull @Length(max=20),可以选择定义在get方法上,或者对应的字段field之上
使用的时候可以在一层进行设置,然后使用到各个层次中 需要下载单独的jar包,是一个单独的框架
验证的方法
ClassValidator personValidator = new ClassValidator(Person.class)
ClassValidator addressValidator = new ClassValidator(Address.class,ResourceBundle.getBundle("messages",Locale.ENGLISH))
第一行依赖嵌入Hibernate验证器内的错误信息
第二行为这些信息准备资源包
InvalidValue[] validationMessages = addressValidtor.getInvalidValues(address)
进行验证,返回错误信息
也可以对一个属性进行验证
ClassValidator addressValidator = new ClassValidator(Address.class,ResourceBundle.getBundle("messages",Locale.ENGLISH)
InvalidValue[] validationMessagees = addressValidator.getInvalidValues(address,"city")
InvalidValue[] validationMessagees = addressValidator.getPotentialInvalidValues("city","Paris")
发表评论
-
【转】在项目中使用多个数据源-多sessionFactory方案
2013-05-10 16:30 3126适用范围:适合SSH架构访问多个数据库, ... -
Hibernate使用中从数据库到模型的加载方式研究
2010-01-28 13:19 1962在项目中数据库中账单Bill一个字段是有多个订单id的以逗 ... -
hibernate中@Transient的使用
2010-01-19 15:20 10690项目中可能有许多实体的需要辅助的属性和方法辅助,hibe ... -
关于hibernate中注解和hbm共存时的加载规律
2010-01-19 15:13 3798项目中使用Spring2.5+hibern ... -
hibernate查询的使用的点滴积累
2010-01-09 13:04 1912/** * 前台查询酒店的级别,设备,类型 * * ... -
Hibernate 的HQL中一个经典函数elements的使用
2010-01-09 12:53 10340在传递索引和元素给集合时(elements and indic ... -
Hibernate关联查询中with的经典使用
2010-01-09 12:42 2211在项目采用Hibernate关联,采用关联使用比较简单,在关 ... -
判断数据库表每条记录中时间段是否在每一个时间段中
2010-01-09 12:35 3086项目中一个成品价格表,每条记录中的价格有一个使用时间 ... -
JPA 中注解一个父类中多个子类实现查询部分子类方法解决方法
2010-01-09 12:10 2070父类: @Entity@Inheritance(stra ... -
Hibernate调用执行存储过程
2010-01-09 12:03 2030项目中需要采用存 ... -
Hibernate的一个异常的解决方案
2009-12-05 11:01 2442在项目中使用HQL时的遇有多个类的嵌套比较发生的异常: ... -
Hibernate的事件和拦截器体系
2009-12-01 13:53 2357持久层框架底层的拦截器机制是对诸如Spring等业务管理容器拦 ... -
Hibernate的拦截器和监听器
2009-12-01 13:52 1973最近项目需要,用到了Hibernate的拦截器和监听器,有些小 ... -
Hibernate的拦截器和监听器
2009-12-01 13:50 3798项目采用Spring构建,持久层技术采用的是 JPA规范 + ... -
Hibernate的注解many-to-one
2009-11-28 12:12 23274項目中一個實例: ... -
Hibernate查询语言HQL 八大要点
2009-11-18 13:15 2010本文讲述Hibernate查询语言HQL。Hibernat ... -
条件查询(Criteria Queries
2009-11-18 13:14 1772... -
Hibernate查询语言(Query Language), 即HQL
2009-11-18 13:05 2476Hibernate查询语言(Query L ... -
Hibernate中的配置属性
2009-11-15 17:40 1756hbm2ddl.auto的使用配置说明: <!-- ... -
Hibernate JPA 的索引的使用
2009-11-15 17:30 11882在Hibernate中Model中一个对象关 ...
相关推荐
【标签】:Hibernate, Annotation, 笔记, 总结, 注解 【正文】: Hibernate Annotation是Hibernate框架的一个重要特性,它允许开发者直接在Java类上使用注解来定义对象的数据库映射,从而避免了传统的XML配置文件...
《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...
【Hibernate - Annotation 学习笔记】 Hibernate 是一个流行的开源Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据存储。Annotation是Hibernate提供的一种元...
Hibernate_annotation_学习笔记 第1课 课程内容 6 第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 第6课 第一个示例Hibernate HelloWorld 7 第7课 建立Annotation版本的HellWorld 9 第8课 ...
8. **Annotation与XML配置**:Hibernate支持使用注解进行对象的映射,相比XML配置,注解更加简洁,减少了配置文件的维护工作,但XML配置在某些场景下可能更为灵活。 9. **环境准备**:安装Hibernate及相关依赖库,...
《马士兵Hibernate学习笔记》是一份详尽的教程,涵盖了Hibernate框架的核心概念和技术要点。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它有效地解决了Java应用程序与数据库之间的数据交互问题,...
【hibernate学习笔记】 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化了数据库操作。以下是对Hibernate的学习要点的详细解释: 1. **建立第一个Hibernate版本的HelloWorld** - **...
【Hibernate学习笔记】 Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的交互。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及事务处理等方面,帮助...
10. **注解(Annotation)**: Hibernate允许使用注解代替XML配置文件来描述实体和映射关系,使得代码更加简洁和易于理解。 在实际项目中,`.classpath`和`.project`文件是Eclipse IDE的工作空间配置文件,`src`目录...
Hibernate: 第一课:第一个hibernate项目 第二课:测试实体对象的生命周期 第三课:hibernate基本映射 ...第四课:spring对AOP的只是(采用Annotation的方式) 第五课:spring对AOP的只是(采用配置文件的方式)
【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...
在本学习笔记中,我们将深入探讨如何实现这一整合,以及 Spring 中用于简化 Hibernate 操作的 HibernateTemplate 类。 首先,Spring 作为一款全面的后端框架,它提供了 IoC(Inversion of Control,控制反转)和 ...
### 尚学堂Hibernate笔记知识点详解 #### 一、项目初始化与环境搭建 1. **新建项目**:在IDE中创建一个新的Java项目。 2. **构建用户库并添加所需的JAR包**: - 右键点击项目 -> `Build Path` -> `Configure ...
第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 第6课 第一个示例Hibernate HelloWorld 7 第7课 建立Annotation版本的HellWorld 9 第8课 什么是O/R Mapping 11 一、 定义: 11 二、 Hibernate...
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了轻量级的对象封装...总的来说,Hibernate学习笔记涵盖了从基础到高级的多个方面,对于希望掌握Hibernate的开发者来说,是一份相当全面的学习资料。