Hibernate的实体规则

Posted Qiao_Zhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate的实体规则相关的知识,希望对你有一定的参考价值。

  

一、  hibernate的实体类有一定的规则,类似于mybatis的逆向工程导出的实体类。具体的规则以及原因如下:

1.持久化类需要提供午餐的构造方法。

  因为hibernate底层采用反射机制创建对象,采用class.newInstance()创建对象,此方法默认调用无参构造方法创建对象。如果我们只写一个带参数的构造函数在查询的时候会报错误 org.hibernate.InstantiationException

 

2.成员变量私有,提供共有get/set方法访问.需提供属性

  hibernate底层将查询到的数据采用set方法进行设置。

  此处声明一个常识一个类下声明的变量是成员变量不能说是属性,而属性说的是get/setter建造器,一个类有几个属性看这个类有几个getter/setter建造器。

 

3.持久化类中的属性,应尽量使用包装类型

  例如int采用Integer,long采用Long。原因如下:

  (1)有可能我们对一些值不需要设值,比如null,但是我们如果用int这样的基本数据类型将不能存储null,比如我们想用成绩为null表示缺考,成绩为0表示考试了但是获得 的成绩为0.

  (2)数据库中的null如果映射到基本数据类型会报错误,采用包装类型可以避免这些问题。

 

4.持久化类需要提供oid(Object Identifier,对象标识符).与数据库中的主键列对应

  注意如果没有主键的表hibernate是不能进行操作的。

  数据库中的表采用ID进行区分,每条唯一的是一条记录;Java中通过内存地址区分两个对象是否是相同对象,而hibernate通过 OID进行区分,hibernate不允许在内存中出现两个相同OID的对象。

 

5.不要用final修饰class

 hibernate使用cglib代理生成代理对象.代理对象是继承被代理对象.如果被final修饰.将无法生成代理。JDK代理采用实现接口的方式,而cgib采用继承的方式实现代理。

 

 

 

 

二、hibernate主键类型

1.  自然主键(少见)

   表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用.比如用户表有身份证号字段,身份证号不能为空而且能唯一区分一条记录,则可以将身份证号作为主键。

 

2.代理主键(常见)

  表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义的列作为主键。(这也是设计数据库的一条常用规则,每个表都有一个与业务无关的主键)

 

 

三、hibernate主键生成策略

 

以上是关于Hibernate的实体规则的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate实体类编写规则和主键策略

JAVAEE学习笔记hibernate02:实体规则对象状态缓存事务批量查询和实现客户列表显示

hibernate中实体类注解

Hibernate

Hibernate一对多关系操作

Hibernate_增删改查