1. 1. Hibernate通过@Id指定主键来表示实体的同一性,@Id注解的位置,决定了对实体使用字段访问(持久化引擎直接访问)还是属性访问(通过获取方法与设置方法访问)。
持久化的类。
2. 当一个表的列较多时可以启用动态语句,避免hibernate在省城SQL语句时更新所有列。可以通过以下方式实现:
@org.hibernate.annotations.Entity(dynamicInsert =true, dynamicUpdate = true)
4. hibernate使用衍生属性:该属性没有列属性,不会出现在SQL的INSERT或者UPDATE中
Public BigDecima getTatalIncludingTax(){
}
5.hibernate生成的属性值
@Column(updateable =false,insertable = fasle)
Private Date lastModified;
默认的属性值
需要启用动态的插入与更新
6.hibernate映射组件
需要在被嵌入的类上添加@Embeddable注解
二、 继承与定制类型
(1) 每个带有隐式多态的具体类一张表
Hibernate默认情况下,基类的属性被忽略并且不是持久化的,需要在具体的子类中注解超类来启用属性的嵌入。
@MappedSuperClass public abstract class BillingDetails{ @Column(name ="OWNER", nullable = flase private String owner; .... } //具体的子类 @Entity @AttributeOverride(name = "owner", column = @Column(nmae ="CC_OWNER", nullable = flase) public class CreditCard extends BillingDetails{ @Id private Long id = null; .... }
(2) 每个带有联合的具体类一张表
与(一)对应的表结构类似,此时超类的数据库标识符被该层所有的具体类公用,此时需要把主键移到超类中去,同时从子类中移除
@Entity @Inheritance(stategy = InheritanceType.TABLE_PER_CLASS) public abstract class BillingDetaisl{ @Id@GeneratedValue @Column Private Lang id =null ... } //子类中则不需要包含主键 @Entity @Table(name ="CREDIT_CARD") public class CreditCard extends BillingDetails{ @Column private String number; .. }
(3) 每个类层次结构一张表
这种情况下超类与子类在同一张表中,由特定行表示具体的子类。
这种映射策略比较简单,也是表示多态的最佳方法,但是所有的子类属性必须声明为可以为空。
@Entity @Inheritance(strategy = InheritaceType.SINGLE_TABLE) @DiscriminatorColumn(name = "BILLING_DETAILS_TYPE, discirminatorType = DiscriminatorType.STRING) public abstract class BillingDetails{ @Id@GeneratedValue @Column private Long id = null; ... } @Entity @DiscriminatorVlaue("CC) public class CreditCard extends BillingDetails{ @Column(name = "CC_NUMBER") private String number; ... }
(4) 每个子类一张表
这种情况将超类的属性(子类的共享属性)单独映射到一张表,同时每个子类的不同属性,各自的映射一张表。
@Entity @Inheritance(strategy = InheritanceType.JOINED) public abstract class BillingDetails{ @Id@GeneratedValue @Column(name = "BILLING_DETAILS_ID) private Long id = null; ... } //子类可以指定主键的列明,不指定则直接舒勇超类的主键列作为其外键列 @Entity @PrimaryKeyJoinColumn(name = "CREDIT_CARD_ID") public class CreditCard extends BillingDetails{ .... }
(5) 混合继承策略
也就是可以针对特定子类指定单独的继承策略
//父类继承策略中选取了SINGLE_TABLE,但仍然可以使某个子类单独映射表 @Entity @DiscriminatorValue("CC") @SecodaryTable(name ="CREDIT_CARD", pkJoinColumns = @PrimaryKeyJoinColumn(name = "CREDIT_CARD_ID") ) public class CreditCard extends BillingDetails{ @Column(table = "CREDIT_CARD", name ="CC_NUMBER", nuable = false) private String number; ... }
相关推荐
NULL 博文链接:https://xiaojianhx.iteye.com/blog/1744681
hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式
NULL 博文链接:https://xingkexin.iteye.com/blog/2222618
Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略
Hibernate一对一数据关联 Hibernate下的多对多关系 Hibernate关系映射 Hibernate继承关系映射 Hibernate映射类型-主键生成器-核心API Hibernate3 插件Eclipse配置
Hibernate学习:单向多对一关联 工程
hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~...
Java框架中关于hibernate的基础学习
Hibernate学习要点:一对一主键关联双向
学习hibernate框架所做的学习笔记,hibernate框架一款重量型的ORM型框架,十分的强大。
hibernate初学者学习入门之一对多实体映射关系源码
对于想学习hibernate的同学来说绝对是一个很好的文档总结
hibernate一对一外键关系,很适合入门者学习.
Hibernate是一个优秀的持久化框架 什么是持久化? Hiberante应用程序的结构 JDBC与Hibernate的比较 第二章 Hibernate API 目标: Hibernate API简介 在java应用hibernate步骤 Hibernate 配置文件 持久化类 创建对象-...
免积分的资源,希望可以帮到大家,这是我学习hibernate时候,自己写的代码。希望大家学业有成。
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了...07 07Hibernate_Mapping : Hibernate中的数据关联技术,是一个重点又是一个难点,演示了 一对一、多对一、一对多、多对多等几种情况。
示例中包括:基于底层的JDBC对数据库的操作和利用hibernate对数据库操作的对比,其中hibernate的实体关系映射包括(一对多,多对多)还有与Spring的整合例子。
NULL 博文链接:https://luan.iteye.com/blog/1744232
Hibernate3 学习笔记.ppt 一、O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、Hibernate Annotations 五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 ...
hibernate学习笔记第一天的源码