`
xudongcsharp
  • 浏览: 475175 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate--id生成策略

阅读更多
http://www.hibernate.org/

一、定义
id生成策略:hibernate根据数据库设置帮你生成id

二、各种配置
基于XML配置
<id name="id" type="java.lang.Integer">
            <column name="ID" precision="8" scale="0" />
            <generator class="native" />
  </id>

常见的generator:
increment:用于long、short、int类型唯一标识,只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不能使用

identity:采用数据库提供的主键生成机制。如DB2、SQL   Server、MySQL   中的主键生成机制。 

sequence:采用数据库提供的sequence机制生成主键。如 Oralce 中的Sequence。 

native: 由Hibernate  根据使用的数据库自行判断采用identity、hilo、sequence 其中一种作为主键生成方式。跨数据库平台!

hilo:通过hi/lo   算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源

uuid.string:与uuid.hex类似,只是生成的主键未进行编码(长度16),不能应用在   PostgreSQL数据库中。 (要求主键是String类型)

基于Anootation
指定seq的名称!
@Entity
@Table(name="Teacher")
@SequenceGenerator(name="teacher_SEQ",sequenceName="seq_teacher")
public class Teacher {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacher_SEQ")
public int getId() {
return id;
}

联合主键....

二、核心接口
3 Configuration
a) AnnotationConfiguration
b) 进行配置信息的管理
c) 用来产生SessionFactory
d) 可以在configure方法中指定hibernate配置文件
e) 只需关注一个方法即:buildSessionFactory
4 SessoinFactory
a) 用来产生和管理Session
b) 通常情况下每个应用只需要一个SessionFactory
c) 除非要访间多个数据库的情况
d) 关注两个方法即:openSession getCurrentsession
i. open session每次都是新的,需要close
ii. getCurrentsession从上下文找,如果有,用旧的,如果没有,建新的
1. 用途,界定事务边界
2. 事务提交自动close
3. 上下文配置可参见xml文件中
    <property name="current_session_context_classs">thread</property>
4. current_session_context_class (jta、thread常用 managed、custom.Class少用)
a) thread 使用connection 但数据库连接管理事务
b)jta (全称java transaction api)-java分布式事务管理(多数据库访问)
jta由中间件提供(jboss WebLogic等,tomcat不支持)
5 Session
a) 管理一个数据库的任务单元(简单说就是增 删 改 查)
b) 方法(CRUD)
i. Save()
ii. delete
iii. load
iv. get
v. get与load的区别
1. 不存在对应记录时表现不一样
2. load返回的是代理对象,等到真正用到对象的内容时才发出sql语句
3. get直接从数据库加载,不会延迟
vi. updates
1. 用来更新detached对象,更新完成后转为persistent状态
2. 更新transient对象会报错
3. 更新自己设定id的transient对象可以(数据库有对应记录)
4. persistent状态的对象只要设定(如:t.setName…)不同字段就会发生更新
5. 更新部分更改的字段
a) xml 设定 property 标签的 update 属性,annotation 设定@Column 的 updatable
属性,不过这种方式很少用,因为不灵活
b) 使用xml中的dynamic-update,JPA1.0 Annotation 没有对应的属性,hibernate 扩
展?
i. 同一个session可以,跨session不行,不过可以用merge()(不重要)
c) 使用 HQL(EjBQL)(建议)
vii. saveOrUpdate()
viii. clear方法
1.无论是load还是get,都会首先査找缓存(一级缓存),如果没有,才会去数据库査找,调用
clear()方法可以强制清除session缓存
ix. flush()方法
1. 当session的事务提交后,会强制将内存(session缓存)与数据库同步.默认情况下是session的事务提交(commit)时才同步!
2. session的FlushMode设置,可以设定在什么时候同步缓存与数据库(很少用)
例如: session.setFlushMode(FlushMode.AUTO)
x. find方法已经过时!
6 SchemaExport (自动建表)

分享到:
评论

相关推荐

    Hibernate-annotations-3.4最新版本

    对于类的属性,@Id注解标识主键,@GeneratedValue注解用于自动生成主键值。此外,@Column注解可以定义列名、长度、是否可为空等属性。 在关联关系的处理上,Hibernate-annotations同样提供了丰富的注解。比如,@...

    hibernate-annotations-3.4.0.GA

    4. @GeneratedValue:定义主键生成策略,如IDENTITY、SEQUENCE、TABLE等。 5. @Column:定义字段与表中列的对应关系,包括长度、精度、非空性等属性。 6. @ManyToOne、@OneToOne、@OneToMany、@ManyToMany:定义不同...

    hibernate-common-annotations.jar

    4. @GeneratedValue:控制主键的生成策略,如自增、UUID等。 5. @Column:定义字段属性,如长度、是否允许为空等。 6. @OneToMany、@ManyToOne、@OneToOne、@ManyToMany:表示不同类型的关联关系,如一对一、一对多...

    hibernate-annotations 相关jar包

    4. `@GeneratedValue`: 配合`@Id`注解,定义主键生成策略,如自动增长、UUID等。 5. `@Column`: 定义实体类属性与数据库表列的映射,包括列名、是否可空、长度等属性。 6. `@OneToOne`, `@OneToMany`, `@ManyToOne`,...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    - `@GeneratedValue`: 配合@Id指定主键生成策略,如.AUTO(自动增长)、.IDENTITY(数据库自增)等。 - `@Column`: 描述实体类属性与数据库列的映射,包括列名、长度、是否允许为空等。 2. **枚举映射** - Hibernate...

    Hibernate教程02_ID生成策略

    在Java的持久化框架Hibernate中,ID生成策略是至关重要的一个环节。它是用来唯一标识数据库中每一行记录的关键部分。本教程将详细讲解Hibernate中的ID生成策略,以及如何在实际项目中灵活应用。 首先,ID生成策略是...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    2. **主键生成策略**:支持多种主键生成方式,如自增(Identity)、序列(Sequence)、高/低算法(Hi/Lo Algorithm)、UUID算法等。 3. **复合主键**:当需要使用多个字段作为主键时,可以使用composite-id元素。 4....

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    4. @GeneratedValue:控制主键的生成策略,如自动增长、序列等。 5. @Column:定义字段在数据库表中的列名及属性,如长度、是否可为空等。 6. @ManyToOne, @OneToMany, @OneToOne, @ManyToMany:表示不同类型的关联...

    hibernate-release-5.2.3.Final

    例如,@Entity表示实体类,@Id表示主键,@GeneratedValue指定主键生成策略。 5. CRUD操作: Hibernate通过Session接口提供了便捷的CRUD(Create、Read、Update、Delete)操作。如save()、get()、update()、delete...

    hibernate-release-4.3.5

    `@Id`和`@GeneratedValue`则是主键生成策略的声明。 在`hibernate-release-4.3.5.Final`中,一个关键的改进是对JPA 2.1规范的支持,这包括了新的特性如多租户、存储过程调用以及对Java 8日期时间API的支持。多租户...

    hibernate-release-4.1.4.Final核心jar包

    `@Entity`、`@Table`、`@Id`等注解用于定义实体类,而`@GeneratedValue`用于处理主键生成策略。 3. **HQL(Hibernate Query Language)**:这是一种面向对象的查询语言,类似于SQL,但更贴近Java对象。HQL允许...

    hibernate-annotation

    4. `@GeneratedValue`:用于指定主键生成策略,如自增、UUID等。例如: ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; // ... } ``` 5. `@...

    hibernate-annotations-3.4.0.jar

    2. **属性注解**:属性可以使用`@Id`注解来标识为主键,`@GeneratedValue`注解用于指定主键生成策略。对于非主键属性,可以使用`@Column`注解来设置列名、长度、是否允许为空等属性。例如: ```java @Id @...

    hibernate-annotations-3.4.0.GA.chm中文版

    @Id用于标记主键字段,可以配合@IdClass或@GeneratedValue来定义主键生成策略。 2. **属性注解**:@Column定义列名和属性,如长度、是否允许为空等。@GeneratedValue用于设置自动增长策略,如IDENTITY、SEQUENCE或...

    hibernate,hibernate3,Middlegen-Hibernate-r5

    例如,`@Entity`定义一个实体类,`@Table`指定对应的数据库表,`@Id`标记主键字段,`@GeneratedValue`定义主键生成策略等。 四、Middlegen-Hibernate-r5 Middlegen是Hibernate的配套工具,它能够根据数据库的模式...

    hibernate-release-5.2.10

    例如,@Entity表示实体类,@Table指定表名,@Id标识主键,@GeneratedValue指定主键生成策略。 五、持久化操作 1. 插入:Session的save()或saveOrUpdate()方法用于插入新记录。 2. 更新:update()或merge()方法更新...

    hibernate-annotations-3.4.0.GA.rar

    - `@Id`: 标识实体类中的主键字段,通常配合`@GeneratedValue`来指定主键生成策略。 3. **字段映射** - `@Column`: 指定字段与数据库列的映射,包括列名、长度、是否可为空等属性。 - `@GeneratedValue`: 控制...

    Hibernate-Annotation-3.4.0帮助文档

    - `@Table`: 定义实体所对应的数据库表名及其特性,如表名、序列号生成策略等。 - `@Id`: 标识一个字段为实体的主键,通常与`@GeneratedValue`一起使用,用于自动生成主键值。 - `@GeneratedValue`: 配置主键生成...

    hibernate-Annotation.jar

    - `@GeneratedValue`:用于指定主键生成策略,例如自增(IDENTITY)、序列(SEQUENCE)等。 - `@Temporal`:对于日期时间类型,`@Temporal(TemporalType.TIMESTAMP)`等可以指定存储格式。 4. **关系映射注解** -...

Global site tag (gtag.js) - Google Analytics