iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Hibernate配置的内容要点
  • 708
分享到

Hibernate配置的内容要点

2023-06-17 10:06:07 708人浏览 独家记忆
摘要

这篇文章主要介绍“Hibernate配置的内容要点”,在日常操作中,相信很多人在Hibernate配置的内容要点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate配置的内容要点”的疑惑有所帮助!

这篇文章主要介绍“Hibernate配置的内容要点”,在日常操作中,相信很多人在Hibernate配置的内容要点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate配置的内容要点”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

两种配置文件:

A.hibernate.cfg.xml和B.hibernate.properties

A中可含映射文件的配置,而B中hard codes加映射文件。

A.Configuration config=new Configuration().config();

B.Configuration config=new Configuration();

config.addClass(TUser.class);

你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名,你也不一定非得把配置文件放在Classes下,

File file=new File("c://sample//myhibernate.xml");  Configuration config=new Configuration().config(file);

session.Flush() 强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush在session关闭时也会调用flush

Hibernate总是使用对象类型作为字段类型

XDoclet专门建立了hibernate doclet,就是在java代码上加上一些java docTag,后来再让XDoclet分析该java代码,生成映射文件;

HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。

关系:Constrained:约束,表明主控表的主键上是否存在一个外键(foreigh key)对其进行约束。

property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名

单向一对多需在一方配置,双向一对多需在双方进行配置

lazy=false:被动方的记录由hibernate负责记取,之后存放在主控方指定的Collection类型属性中

java.util.Set或net.sof.hibernate.collecton.Bag类型的Collection

重要:inverse:用于标识双向关联中的被动方一端。

inverse=false的一方(主控方)负责维护关联关系.默认值:false

batch-size:采用延迟加载特征时,一次读入的数据数昨。

一对多通过主控方更新(主控方为一方时)

user.getAddresses().add(addr); session.save(user);//通过主控对象级联更新

在one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能的改善。在一方设置关系时,inverse=true,即将主控权交给多方,这样多方可主动从一方获得foreign key,然后一次insert即可完工。

addr.setUser(user);//设置关联的TUser对象   user.getAddresses().add(addr);  session.save(user);//级联更新

只有设为主控方的一方才关心(访问)对方的属性,被动方是不关心对方的属性的。

one-to-many与many-to-one节点的配置属性不同:

一对多关系多了lazy和inverse两个属性多对多节点属性:

column:中间映射表中,关联目标表的关联字段

class:类名,关联目标类

outer-join:是否使用外联接

注意:access是设置属性值的读取方式。

column是设置关联字段。

多对多,注意两方都要设置inverse和lazy,cascade只能设为insert-update

多对多关系中,由于关联关系是两张表相互引用,因此在保存关系状态时必须对双方同时保存。

group1.getRoles().add(role1);   role1.getGroups().add(group1);    session.save(role1);   session.save(group1);

关于vo和po

vo经过hibernate容量处理,就变成了po(该vo的引用将被容器保存,并且在session关闭时flush,因此po如果再传到其它地方改变了,就危险了)  vo和po相互转换:BeanUtils.copyProperties(anotherUser,user);

对于save操作而言,如果对象已经与Session相关联(即已经被加入Session的实体容器中),则无需进行具体的操作。因为之后的Session.flush过程中,Hibernate 会对此实体容器中的对象进行遍历,查找出发生变化的实体,生成并执行相应的update 语句。

如果我们采用了延迟加载机制,但希望在一些情况下,实现非延迟加 载时的功能,也就是说,我们希望在Session关闭后,依然允许操作user的addresses 属性 Hibernate.initialize方法可以通过强制加载关联对象实现这一功能: 这也正是我们为什么在编写POJO时,必须用jdk Collection接口(如Set,Map), 而非特定的JDK Collection实现类(如HashSet、HashMap)申明Collection属性的 原因。

事务:从sessionFactory获得session,其自动提交属性就已经关闭(AutoCommit=false),此时若执行了jdbc操作,如果不显式调用session.BeginTransaction(),是不会执行事务操作的。

jdbc transaction:基于同一个session(就是同一个connection)的事务;

jta transaction:跨session(跨connection)事务.

对于jta事务,有三种实现方法:

A、

UserTransaction tx=new InitialContext().lookup("...");   tx.commit();

B、使用hibernate封装的方法:(不推荐)

Transaction tx=session.beginTransaction();   tx.commit();

C、使用ejb之sessionBean的事务技持方法,你只要在把需要在发布描述符中,把需要jta事务的方法声明为require即可

悲观,乐观锁:

乐观锁一般通过version来实现,注意version节点必须出现在id后。

Hibernate中,可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围。

Query接口中也提供了与其一致的方法,hibernate主要在dialect类中实现在这个功能。

cache   ……   net.sf.ehcache.hibernate.Provider 

还需对ecache本身进配置

之后在映射文件中指定各个映射实体的cache策略

....

*****************************************************

Query.list()跟Query.iterate()的不同: 对于query.list()总是通过一条sql语句获取所有记录,然后将其读出,填入pojo返回; 但是query.iterate(),则是首先通过一条Select SQL 获取所有符合查询条件的记录的 id,再对这个id 集合进行循环操作,通过单独的Select SQL 取出每个id 所对应的记 录,之后填入POJO中返回。

也就是说,对于list 操作,需要一条SQL 完成。而对于iterate 操作,需要n+1 条SQL。list方法将不会从Cache中读取数据。iterator却会。

ThreadLocal:它会为每个线程维护一个私有的变量空间。实际上, 其实现原理是在JVM 中维护一个Map,这个Map的key 就是当前的线程对象,而value则是 线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时, ThreadLocal会根据当前线程对象的引用,取出Map中对应的对象返回。

这样,ThreadLocal通过以各个线程对象的引用作为区分,从而将不同线程的变量隔离开来。

Hibernate官方开发手册标准示例:

public class HibernateUtil {   private static SessionFactory sessionFactory;   static {   try {  // Create the SessionFactory sessionFactory =  new Configuration().configure().buildSessionFactory();   } catch (HibernateException ex)  {  throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );   }   }  public static final ThreadLocal session = new ThreadLocal();  public static Session currentSession() throws HibernateException {  Session s = (Session) session.get();   // Open a new Session, if this Thread has none yet if (s == null) {  s = sessionFactory.openSession(); session.set(s);  }  return s;   }   public static void closeSession() throws HibernateException  {  Session s = (Session) session.get();  session.set(null);  if (s != null) s.close();  }  }

通过filter实现session的重用:

public class PersistenceFilter implements Filter {  protected static ThreadLocal hibernateHolder = new ThreadLocal();  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws IOException, ServletException{  hibernateHolder.set(getSession());  try {  ……  chain.doFilter(request, response);  ……  }  finally {  Session sess = (Session)hibernateHolder.get();  if (sess != null) {  hibernateHolder.set(null);  try {  sess.close();  }  catch (HibernateException ex) {  throw new ServletException(ex);  }  }  }  }  ……  }

spring的参数化事务管理功能相当强大,笔者建议在基于Spring Framework的应用 开发中,尽量使用容器管理事务,以获得数据逻辑代码的***可读性。

public class UserDAO extends HibernateDaoSupport implements IUserDAO {  public void insertUser(User user){  getHibernateTemplate().saveOrUpdate(user);  }  }

上面的UserDAO实现了自定义的IUserDAO接口,并扩展了抽象类:

HibernateDaoSupport HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。

HibernateTemplate对Hibernate Session操作进行了封装,而 HibernateTemplate.execute方法则是一封装机制的核心

*在spring的配置文件里,移植了整个hibernate.cfg.xml的内容。

到此,关于“Hibernate配置的内容要点”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Hibernate配置的内容要点

本文链接: https://www.lsjlt.com/news/288593.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hibernate配置的内容要点
    这篇文章主要介绍“Hibernate配置的内容要点”,在日常操作中,相信很多人在Hibernate配置的内容要点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate配置的内容要点”的疑惑有所帮助!...
    99+
    2023-06-17
  • MPLS L3×××的配置要点
    MPLS的V3是在PE上虚拟VRF路由器。一台PE如果有2个VRF则在它上面有3张路由表,全局,VRFA,VRFB,所有的VRF都会关联相应的接口,以及相应的路由协议,如果路由协议不支持多进程则无法完成多实例配置。利用这个方式有时候我们在无...
    99+
    2023-01-31
    要点 MPLS
  • Python编程电脑配置指南:不容忽视的要点
    Python编程已经成为许多人学习和应用的重要工具,而一台优秀的电脑配置对于Python编程的顺畅进行起着至关重要的作用。在选择合适的电脑配置时,有一些不容忽视的要点需要特别注意,本文...
    99+
    2024-04-02
  • Ubuntu 16.04 装机后的配置要点
    Ubuntu 作为一个Linux的发行版,在桌面环境的易用性上做了很多改善,对推动Linux的推广做了很大的贡献。同时,它作为服务器的操作系统也越来越多的被使用。当然,服务器端可能更多的人在使用Redhat、CentOS等系统。Linux的...
    99+
    2023-06-02
  • .NETCore获取配置文件内容
    结合了好几个哥们的写法,最终我使用了这个版本,现在把我这个版本的写出来,如果该版本和您的版本类似或者一样,那可能是借鉴您的 using Microsoft.AspNetCore.Ho...
    99+
    2024-04-02
  • Hibernate配置文件的示例分析
    小编给大家分享一下Hibernate配置文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!有两种Hibernate配置文件格式,一种是XML,默认为Hi...
    99+
    2023-06-17
  • 需要学习的内容
    1. 简单的python爬虫,用于从investing爬股票数据,需要掌握requests和beautifulsoap4这两个模块。 2.把爬到的数据存储到excel中,最好能顺便把市场简称也同时替换为.NQ和.NY,需要学会用openp...
    99+
    2023-01-31
    内容
  • Nginx演练(3)配置内容压缩
    如果对HTTP熟悉的话,对request-response请求过程应该很熟悉。比如访问“www.jd.com",一个完整页面的访问,往往会经过很多次的HTTP请求共同完成,这中间会涉及到浏览器并发数。具体片段如图客户端请求的资源内容有多种,...
    99+
    2023-01-31
    内容 Nginx
  • 深入浅析Hibernate中的配置文件
    今天就跟大家聊聊有关深入浅析Hibernate中的配置文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们看一下hibernate的主配置文件<!DOCTYPE hibe...
    99+
    2023-05-31
    hibernate te
  • SpringBoot获取yml和properties配置文件的内容
    (一)yml配置文件:pom.xml加入依赖:<!-- 支持 @ConfigurationProperties 注解 --><!-- https://mvnrepository.com/artifact/org.sprin...
    99+
    2023-05-31
    springboot yml properties
  • 使用PHP内置SOAP要点的示例分析
    今天就跟大家聊聊有关使用PHP内置SOAP要点的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对于刚刚接触PHP语言的新手来说,对于PHP内置SOAP可能还是了解的不太多。P...
    99+
    2023-06-17
  • C#入门知识点需要掌握哪些内容
    本篇内容介绍了“C#入门知识点需要掌握哪些内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#(发音为“See Sharp”)是简单、现代...
    99+
    2023-06-17
  • 云服务器的主要优势是哪些内容和特点
    云服务器(Cloud Server)是一种虚拟服务器,它提供了一种高可用性、高性能、稳定性和可靠性的云计算环境,能够为多个云服务提供平台基础架构。以下是云服务器的主要优势和特点: 高可用性:云服务器通过多台计算机互联来提供高可用性,当主...
    99+
    2023-10-26
    优势 服务器 内容
  • hibernate 配置数据库方言的实现方法
    本文主要介绍了hibernate 配置数据库方言的实现方法,分享给大家,具体如下: RDBMS 方言 ...
    99+
    2024-04-02
  • 云服务器有哪些配置要求的内存
    云服务器的内存可以是SSD硬盘或固态硬盘。SSD硬盘速度快、容量大,但是价格较高,不适合大型云服务器;而固态硬盘则具有更高的可靠性和稳定性,但价格相对较高。对于小型云服务器,可以选择SSD硬盘作为内存。 云服务器的存储空间可以是云盘或者云...
    99+
    2023-10-28
    内存 服务器 有哪些
  • SpringBoot获取配置文件内容的方式有哪些
    这篇文章主要介绍“SpringBoot获取配置文件内容的方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot获取配置文件内容的方式有哪些”文章能帮助大家解决问题。前言现有配置...
    99+
    2023-07-05
  • 云服务器的主要优势是哪些内容和特点呢
    云服务器(Cloud Storage,也称为云存储)是一种基于互联网的服务器,可以使用户在任何地方访问和共享数据。与传统服务器相比,云服务器具有以下优势: 弹性和可扩展性:云服务器可以根据需求随时增加和减少存储容量和计算能力,这使得用户...
    99+
    2023-10-27
    优势 服务器 内容
  • 内容分发网络CDN回源Request Header配置
    在配置内容分发网络(CDN)回源时,可以通过设置请求头(Request Header)来自定义CDN与源站之间的通信协议和行为。以下...
    99+
    2023-09-21
    CDN
  • 关于IDEA配置Hibernate中遇到的问题解决
    发现问题 1.在配置User.hbm.xml文件时, table处无法找到t_user的表,于是alt+enter显示Assign Data Sources 将Data Sourc...
    99+
    2024-04-02
  • 网络安全法的主要内容
    维护网络主权与合法权益;支持与促进网络安全;强调网络运行安全;保障网络信息安全;监测预警与应急处置;完监督管理体制;明确相关利益者法律责任。通过网络安全法,可以有效的防止境外非法机构对我国的网络实施遏制、侵犯。该法的出台,对于维护网络运行安...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作