• 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中基本类型作为标识属性的类型,但是这样做在很多地方都不太方便,因此还是建议使用基本类型的包装类型作为标识属性的类型。

    啦啦啦

  • 相关阅读:
    Understanding Unix/Linux Programming-ls指令练习二
    Understanding Unix/Linux Programming-ls指令练习一
    Understanding Unix/Linux Programming-who指令练习
    复习自控有感——20160307
    根轨迹法的校正正目标、原理和方法
    Understanding Unix/Linux Programming-cp指令练习
    树莓派交叉编译环境在Linux下的建立
    Vue最全指令大集合————VUE
    JS实现动态瀑布流及放大切换图片效果(js案例)
    JS实现自动轮播图效果(js案例)
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/7497853.html
Copyright © 2020-2023  润新知