码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate的实体规则

时间:2018-07-21 20:33:20      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:调用   obj   导出   except   规则   ant   str   方式   getter   

  

一、  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的实体规则

标签:调用   obj   导出   except   规则   ant   str   方式   getter   

原文地址:https://www.cnblogs.com/qlqwjy/p/9347739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!