5 -- Hibernate的基本用法 --5 1 持久化类的要求
1. 提供一个无参数的构造器:所有的持久化类都应该提供一个无参数的构造器,这个构造器可以不采用public访问控制符。只要提供了无参数的构造器,Hibernate就可以使用Constructor.newInstance()来创建持久化类的实例了。通常,为了方便Hibernate在运行时生成代理,构造器的访问控制修饰符至少是包课件的,及大于或等于默认的访问控制符。
2. 提供一个标识属性:标识属性通常映射数据库表的主机字段。这个属性可以叫任何明智,其类型可以是任何的基本类型、基本类型的包装类型、java.lang.String 或者java.util.Date。如果使用了数据库表的联合主键,甚至可以用一个用户自定义的类,该类用用这些类型的属性。当然也可以不指定任何标识属性,而是在持久化注解中直接将多个普通属性映射成一个联合主键,但通常不推荐这么做。
3. 为持久化累de每个成员变量提供setter和getter方法:Hibernate默认采用属性方式来访问持久化累的成员变量。
4. 使用非final的类: 在运行是生存代理是Hibernate的一个重要功能。如果持久化累没有实现任何接口,Hibernate使用Javassist生成代理,该代理对象是持久化类的子类的实例。如果使用了final类,则无法生成Javassist生成代理,将无法进行性能优化。还有一个可选的策略,就是让Hibernate持久化类实现一个所有方法都声明为public的接口,此时将使用JDK的动态代理。同时应该避免在非final类中声明public final的方法。如果非要使用一个有public final方法的类,则必须通过设置lazy="false"来明确地禁用代理。
5. 重写equals()和hashCode()方法:如果需要把持久化类的实例放入set中(当需要进行关联映射时,推荐这么做),则应该为该持久化类重写equals()和hashCode()方法。实现equals()/hashCode()最显而易见的方法是比较两个对象标识属性的值。如果值相同,则两个对象对应于数据库的同一行,隐藏他们是相等的(如果都被添加到Set中,则Set中只有一个元素)。遗憾的是,对采用自动生成标识值的对象不能使用这种方法。Hibernate仅为那么持久化对象指定标识值,一个新创建的实例将不会有任何标识值。因此,如果一个实例没有被保存过,但它又确实在一个Set中,那么它将会给这个对象付一个标识值。如果equals()和hashCode()是基于标识值实现的,则其hashCode()返回值会发生改变,这将违反Set的规则。
提示:
虽然Hibernate允许使用8中基本类型作为标识属性的类型,但是这样做在很多地方都不太方便,因此还是建议使用基本类型的包装类型作为标识属性的类型。
啦啦啦
5 -- Hibernate的基本用法 --5 1 持久化类的要求的更多相关文章
- 5 -- Hibernate的基本用法 --5 2 持久化对象的状态
1. 瞬态 : 对象有new操作符创建,且尚未与Hibernate Session关联的对象被认为处于瞬态.瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识.如果程序中失去了瞬态对象的引用,瞬态 ...
- hibernate学习笔记(2)持久化类测试
持久化类的创建: 创建一个共有的不带参数的构造方法: public void Students(){ } 创建一个带参数的构造方法: (快捷键创建) 生成get,set方法: *可以不用此方法创建持久 ...
- hibernate课程 初探一对多映射2-5 创建持久化类并配置映射文件
学习点: 1 一对多映射,一方 Grade.hbm.xml的写法: <hibernate-mapping> <class name="com.ddwei.entity.Gr ...
- Hibernate学习——持久化类的学习
A.概念 持久化:将内存中的对象持久化(存储)到数据库的过程.Hibernate就是持久化的框架. 持久化类:一个普通java对象与数据库的表建立了映射关系,那么这个类在Hiberna中被称为持久化类 ...
- 5 -- Hibernate的基本用法 --2 2 Hibernate的数据库操作
在所有的ORM框架中有一个非常重要的媒介 : PO(持久化对象:Persistent Object).持久化对象的作用是完成持久化操作,简单地说,通过该对象可对数据执行增.删.改的操作 ------ ...
- 三大框架 之 Hibernate生成策略与缓存策略(主键生成策略、持久化、持久化类划分、一级缓存、事物管理)
目录 Hibernate生成策略与缓存策略 主键生成策略 主键分类 主键的生成策略 持久化 什么是持久化 什么是持久化类 持久化类编写规则 持久化类的划分 三种状态区分 持久态对象特征 一级缓存 什么 ...
- 5 -- Hibernate的基本用法 -- 要点
Hibernate的基本用法 ⊙ ORM的基本知识 ⊙ ORM和Hibernate的关系 ⊙ Hibernate的基本映射思想 ⊙ Hibernate入门知识 ⊙ 使用Eclipse开发Hiberna ...
- Hibernate持久化类属性映射
Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...
- Hibernate的持久化类状态
Hibernate的持久化类状态 持久化类:就是一个实体类 与 数据库表建立了映射. Hibernate为了方便管理持久化类,将持久化类分成了三种状态. 瞬时态 transient (临时态):持久化 ...
随机推荐
- linux命令行下修改系统时间、时区
date查看时间以及时区 图a是est时区,和HONGkong时间查了一个小时. # 保存设置$ sudo mv /etc/localtime /etc/localtime.old # 设置时区 $ ...
- EBS 由数据库端找到对应的前台URL地址
SELECT home_url FROM icx_parameters; SELECT profile_option_value FROM fnd_profile_option_values ...
- javax.crypto.BadPaddingException: Given final block not properly padded解决方案
解密的时候报错: javax.crypto.BadPaddingException: Given final block not properly padded 该异常是在解密 ...
- Python中多进程的使用
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
- MSVC 12: compiler error in boost/type_traits/common_type.hpp
来自: https://svn.boost.org/trac10/ticket/11885 MSVC 12: compiler error in boost/type_traits/common_ty ...
- 解决IE6-IE8 Js代码不执行问题
一种可能的原因:form标签不完整. 使用在线工具,测试html代码标签的完整性.
- Spark机器学习(2):逻辑回归算法
逻辑回归本质上也是一种线性回归,和普通线性回归不同的是,普通线性回归特征到结果输出的是连续值,而逻辑回归增加了一个函数g(z),能够把连续值映射到0或者1. MLLib的逻辑回归类有两个:Logist ...
- RescuePro Deluxe恢复软件SanDisk
RescuePro Deluxe恢复软件 注册码:RPDLX-0600-67844-04261-27951 买硬盘送的,没有用. 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- Attempt to present <TestViewController2: 0x7fd7f8d10f30> on <ViewController: 0x7fd7f8c054c0> whose view is not in the window hierarchy!
当 storyboard里面的 按钮 即连接了 类文件里面的点击方法 又 连接了 storyboard里 另一个 控制器的 modal 就会出现类似Attempt to present & ...
- xcode 编译或者打包的时候 找不到图片的错误
进入app路径,copy一份图片进去就好了