映射的POJO类型中如果有基本类型最好都是用包装类来代替;

注意关联关系的正确设置,一对一(主键方式、外键外键方式),一对多和多对多的配置,单向、双向的配置;

更新核心配置文件的mapping:如果是在hibernate.cfg.xml中以导入映射文件的方式配置的话,注意在增加了新的domain类之后要将新的映射配置文件加入进去;

注意hibernate管理的对象的状态:是瞬时态还是托管态?有时候事务结束了之后还去读代理对象的值,这个时候设置了延迟加载的话会报错的;

注意在一对多主键级联操作的时候外键为NOT NULL可能会引发违例操作,这就和hibernate执行sql语句有关了;

在一对多关联中,常把多的一方作为主动关联方,由它去维护关联关系;也就是将many的一方inverse=false,而且这样也有助于改善性能;维护关联关系体现在将对方的引用设置到自己的属性当中;

尽量少用多对多关联(可以用多个一对多关联来来代替多对多关联);

多对多注意设置延迟加载,避免无谓的性能开销;

多对多关系中由于关联关系是两张表相互引用,因此在保存关联状态时必须双方同时保存,体现在二者互相设置对方的引用;

一对多关系的维护可以是双方都维护,也可以是由一方维护,但是多对多中仅且仅有一方维护关系(也就是inverse的设置);

在一个session中对同一个id最多只能有一个与之对应的瞬时态对象

在修改或这个删除的时候最好都是先查出要修改的对象,再进行操作,这样可以避免原来的关联关系;

通过引用查询可以不在代码中出现HQL/SQL语句;

对Action中对托管态对象的修改由于事务已经关闭而不会同步到数据库中;

避免查询时的SQL语句的N+1问题;

在需要的时候可以将延迟加载设置为false,在class标签中,这样在Session关了之后依然可以使用关联对象;

在编写POJO的时候,必须使用JDK的接口,而不应该使用JDK Collection的实现类,因为Hibernate返回的Set是Hibernate对Set接口的特定实现,因而会造成强转错误;

属性的延迟加载可以在<property>标签中设置,但是要对类进行加强;

Hibernate的内部缓存机制可能造成进行大量插入操作的时候OutOfMemory:可以每隔一段时间清空一次缓存;二是可以在核心配置文件的<session-factory>标签中加入<property name="hibernate.jdbc.batch_size">25</property>来进行批量插入;

hibernate中分页操作的实现;

hibenate的长对话session实现在web项目可以用Spring提供的OpenSessoinInView实现;

有问题欢迎相互探讨!

Hibernate使用注意事项的更多相关文章

  1. hibernate配置注意事项

    1:多对一配置 private Set<DrawRecordModel> cjrecordsSet = new HashSet<DrawRecordModel>(); 正确 p ...

  2. Hibernate criteria 混合sql语句多表关联时查询注意事项

    直接进入正题 假设有一个实体类 /** * 产品分类 */ public class ProductType{ @Id private String no;//编号 private String na ...

  3. (原创)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项(基于项目的总结)

    一.先上知识点: 1.hibernate多对多关联关系中最重要的参数是(基于配置文件xxx.hbm.xml文件形式): 1):inverse属性,如果设置inverse=“true”就代表让对方参与维 ...

  4. 整合struts2+hibernate详细配置步骤及注意事项

    刚刚学完这两个框架,就迫不及待的做了一个例子,在整合两个框架的时候,也碰到了一些小问题,下面介绍一下配置的步骤: 1.创建一个自定义的struts2和hibernate的类库 因为之前写例子都是直接将 ...

  5. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  6. hibernate中session的获取使用以及其他注意事项

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  7. spring+hibernate+Struts2 整合(全注解及注意事项)

    最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar ...

  8. Grails连接外部数据库注意事项Could not determine Hibernate dialect for database name [Oracle]!

    初次使用Grails时,使用其内置数据库,一直不会出错,但迁移到外部数据库时会出错Could not determine Hibernate dialect for database name [Or ...

  9. hibernate detached分离查询 与 抓取策略注意事项

    1.detached在抓取策略为 jion显式左外连接查询情况下 会产生笛卡儿积现象 DetachedCriteria dc = DetachedCriteria.forClass(Topic.cla ...

随机推荐

  1. Java中泛型得到T.class

    例子: public class Test<T> { public Class<T> getTClass() { return (Class<T>) ((Param ...

  2. ASP.NET MVC DropdownList的使用

    1:直接使用HTML代码写 <select name="year"> <option value="2011">2010</opt ...

  3. NTFS数据流和web安全

    NTFS流简单介绍: NTFS因为它的稳定性 强大的功能 以及它所提供的安全性而成为一种更优越的文件系统,NTFS交换数据流(ADSs)是为了和Macintosh的HFS文件系统兼容而设计的,它使用资 ...

  4. 使用iozone测试磁盘性能(测试文件读写)

    IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random w ...

  5. Linux下sqlite3编程

    ---------------------------------------------------------------------------------------------------- ...

  6. 面试题:Java中值传递和引用传递的问题

    随便写写留着自己看. 首先,Java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递! 当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本.指向同 ...

  7. 最简单的PHP socket

    服务端 <?phperror_reporting(E_ALL);set_time_limit(0); $ip = "127.0.0.1";$port = 1935; func ...

  8. spring注入之使用标签 @Autowired @Qualifier

      使用标签的缺点在于必需要有源代码(由于标签必须放在源代码上),当我们并没有程序源代码的时候.我们仅仅有使用xml进行配置. 比如我们在xml中配置某个类的属性            <bea ...

  9. Laravel 5 系列教程三:视图变量传递和Blade

    免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上 ...

  10. C++ 字符串分割函数 str_split

    void str_split(const std::string & src, const std::string & sep, std::vector<std::string& ...