Hibernate 需要注意的地方

cadence CIS 库建立--建立自己维护的CIS数据库 遇到一个问题,在使用cadecnce的时候,就是没有自己的本地/分享的数据库。 在画原理图或者PCB的时候,如果能搭建一个自己的数据库,在局域网或者本地 就好了。出于这样的想法,做了一些探索,找到了一种可能的答案。 由于数据库编制知识的缺乏,要自己建一个数据库似乎花费的时间会比较多。 偶发奇想,如果能够改编CIS 自带的数据库 另建立副本进行维护 就能够省下不少麻烦。 先说下CIS 是个啥。网上一搜:总之CIS 是个好东西。 功能强大。 点击CIS capture 中的 Options CIS Config 阅读详情

1.两种配置文件:
  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);


2.你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名,
   你也不一定非得把配置文件放在Classes下,
   File file=new File("c://sample//myhibernate.xml");
   Configuration config=new Configuration().config(file);

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


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

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

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

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

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

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

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

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


10.重要:inverse:用于标识双向关联中的被动方一端。
         inverse=false的一方(主控方)负责维护关联关系.默认值:false

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

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

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

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


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

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

15.one-to-many与many-to-one节点的配置属性不同:
   一对多关系多了lazy和inverse两个属性
   多对多节点属性:column:中间映射表中,关联目标表的关联字段
                   class:类名,关联目标类
                   outer-join:是否使用外联接    

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


        column是设置关联字段。


16.多对多,注意两方都要设置inverse和lazy,cascade只能设为insert-update
   多对多关系中,由于关联关系是两张表相互引用,因此在保存关系状态时必须对双方同时保存。

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

   session.save(role1);
   session.save(group1);

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

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

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

20.事务:从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即可

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


22.Hibernate中,可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围。
   Query接口中也提供了与其一致的方法,hibernate主要在dialect类中实现在这个功能。


23.cache
   <hibernate-configuration>
 <session-factory>
 ……
  <property name="hibernate.cache.provider_class">
   net.sf.ehcache.hibernate.Provider
  </property> 

  还需对ecache本身进配置
  <ehcache>
 <diskStore path="java.io.tmpdir"/>
 <defaultCache
 maxElementsInMemory="10000" //Cache中最大允许保存的数据数量
 eternal="false" //Cache中数据是否为常量
 timeToIdleSeconds="120" //缓存数据钝化时间
 timeToLiveSeconds="120" //缓存数据的生存时间
 overflowToDisk="true" //内存不足时,是否启用磁盘缓存
 />
  </ehcache>

  之后在映射文件中指定各个映射实体的cache策略
  <class name=" org.hibernate.sample.TUser" .... >
 <cache usage="read-write"/>
 ....
 <set name="addresses" .... >
  <cache usage="read-only"/>
 ....
 </set>
 </class>

 *****************************************************
 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却会。


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

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


25.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();
}
} 


    
26.通过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);
}
}
}
}
……}

27.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的内容。
 

【目标检测-YOLO】YOLOv5-v5.0-yolov5s网络架构详解(第一篇) 源码:GitHub - ultralytics/yolov5 at v5.0 由于YOLO v5 代码库在持续更新,如上图,有多个版本,每个版本的网络结构不尽相同。以下内容以 v5.0 为准,网络结构选用 yolov5s。 为了方便画图和理解网络结构,选用可视化工具:Netron 网页版进行可视化, 然后使用PPT作图。 在Releases · ultralytics/yolov5 · GitHub找到 v5.0中的Assets 中的yolov5s.pt并下载该权重。 下图为直接...... 阅读详情

相关推荐

别再只调电位器了!用单片机PWM控制LM317输出电压,精度和玩法都多了

本文探讨了如何利用单片机PWM控制LM317输出电压,替代传统的电位器调节方案。通过PWM信号的有源滤波和运放处理,实现了更高精度(±5mV)、更好温度稳定性(0.01%/°C)的数控稳压电源设计,支持远程控制和可编程曲线输出,为经典电路注入数字化智能。

weixin_29164497的博客 355

hibernate要点

原文:http://www.donews.net/dyhcn/ 1.两种配置文件:   A.hibernate.cfg.xml   和   B.hibernate.properties   A中可含映射文件的配置,而B中hard codes加映射文件。   A。Configuration config=new Configuration().config();   B. C...

weixin_34320159的博客 136

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 515

Hibernate(四):Hibernate的初始化,增删改查等方法

1,Hibernate初始化类 package com.hibernate; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public cl

努力找工作呀 1230

西门子 G120 变频器报文

G120报文

mmxxoo_xxmmp的博客 8064

LoRa物联网实战:用新大陆模块打造智能LED呼吸灯(附完整代码解析)

本文详细介绍了如何利用新大陆LoRa模块实现工业级智能LED呼吸灯的设计与开发。通过256级PWM调制的呼吸灯效果,结合LoRa无线控制技术,实现设备状态的可视化反馈和多设备同步控制。文章包含完整的硬件选型、电路设计、算法优化和代码实现,特别适合物联网开发者和硬件工程师参考。

github5actions的博客 85

Hibernate中lazy的设置

      1.lazy是什么    Hibernate中的laz

robin622的专栏 4556

【图像超分】论文精读:Residual Dense Network for Image Super-Resolution(RDN)

一个非常深的卷积神经网络 (CNN) 最近在图像分类 (SR) 方面取得了巨大成功,并提供了分层特征。然而,大多数基于深度 CNN 的 SR 模型没有充分利用原始低分辨率 (LR) 图像中的层次特征,从而实现相对较低的性能。在本文中,我们提出了一种新的残差密集网络(RDN)来解决图像SR中的这个问题。我们充分利用所有卷积层的分层特征。具体来说,我们提出了残差密集块(RDB)通过密集连接的卷积层提取丰富的局部特征。RDB 进一步允许将前一个 RDB 的状态与当前 RDB 的所有层直接连接,从而产生连续的内存

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7256

Hibernate的抓取策略---Hibernate查询方式的优化 延迟加载 + 抓取策略

一批关联对象一起进行抓取,batch-size一次获取多个客户的联系人信息。

2401_83329718的博客 980

代谢组数据分析(三十一):空间代谢组学分析从数据加载到通路分析的流程解析

空间代谢组学是一种先进的技术,能够在组织切片上以高分辨率检测代谢物分布,为理解生物代谢过程提供新视角。其分析流程包括数据获取、预处理、代谢物注释、差异表达分析、可视化、通路分析、聚类分析及空间相关代谢物分析等关键步骤。这些步骤帮助研究人员从海量数据中提取有价值信息,揭示代谢物的空间分布规律,发现潜在生物标志物,探索代谢通路调控机制。例如,SpaMTP等工具为全流程分析提供了强大支持,助力研究人员高效处理数据,深入理解代谢过程,为生物学研究和临床应用提供重要依据。

专注生信领域 912

ESP32 VSCode开发环境配置

ESP32 VSCode开发环境配置

qq_53529450的博客 507

Hibernate 笔记三

一对多知识点一对多关系Set排序Set集合 TreeSet 二叉树 自己定义排序规则 HashSet 默认排序方式 hashcode进行排序 指定 order-by="price desc" 一对多删除表数据一对多关系List讲解 <!--orderList是Customer中的成员属性 --> <list name="orderList" table="t_order">

qq_29856871的博客 255

基于LUT表对鱼眼图像进行畸变校正

当然也可以进行图像的畸变校正操作,已知相机的焦距为fx/fy,光心为cx/cy,像素大小为p(单位mm/pixel)对于畸变校正结果图中像素点(u,v),其对应的原图中的像素坐标(u',v')的计算流程描述如下。1)假设无畸变相机成像模型的焦距和光心与原相机相同,计算得到无畸变相机成像模型中归一化平面坐标(X,Y,Z),其中X=(u-cx)/fx,Y=(v-cy)/fy,Z=1。这里x'/y'的单位为像素。

On my way 639

hibernate 3中要注意的地方

 批量更新和删除   在HIBERNATE 3中,批量更新比2有了很大的改善。    以下是通过Hibernate3.0执行批量更新的程序代码: Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); String hqlUpdate = "

jackyrongvip的专栏 1111

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hibernate 缓存中要注意的地方

1 hibernate 中的缓存问题   A 一级缓存和session的生命周期一样的,在比如      Student student=(Student)session.load(Student.class,1);     这样的语句中,如果两次发出这样的语句,是可以用到缓存的。     同样,用get也是可以用缓存的。   B 如果是用迭代查询,比如这样:   

jackyrongvip的专栏 624

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

关于Hibernate不能保存数据 要注意的地方

一般情况下不能保存数据的原因有: 1.没有开启事务,事务没有提交。 2.代码前后的事务不是同一个,这个是不太容易发现的问题,因为代码不会报错 3.主键生成配置有问题,不能生成主键,当然保存不了数据 二保存方法返回值 save方法返回的是Serializable接口,该结果的值就是你插入到数据库后新记录的主键值。如果你的主键是数值,可以按如下方法 Serializable result ...

小土的博客 1186

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Hibernate多表联查需要注意的地方

Hibernate多表联查需要注意的地方 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:MyEclipse10,Java 作者:陈显其 撰写时间:2020年4月27日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_44580670的博客 257

hibernate Session一级缓存 应该注意的地方

Session缓存 Hibernate的一级缓存是由Session提供的,因此它存在于Session的整个生命周期中,当程序调用save()/update()/saveOrupdate()/get()等及查询接口方法list()/iterator()方法时候,如果session中不存在该对象,那么会先将本次的对象存储到一级缓存中便于以后使用,当Session关闭时同时...

aori3524的博客 102

Hibernate 的 findByExample 用法需要注意的地方

Hibernate 的 findByExample 不支持主键 不支持关联 不支持NULL

virgoboy2004的专栏 4721

hibernate 缓存中的一些要注意的地方

1 hibernate 中的缓存问题    A 一级缓存和session的生命周期一样的,在比如      Student student=(Student)session.load(Student.class,1);     这样的语句中,如果两次发出这样的语句,是可以用到缓存的。     同样,用get也是可以用缓存的。    B 如果是用迭代查询,比如这样:       Student st...

jackyrongvip的专栏 141

eclipse创建Hibernate Demo中需要注意的地方

我用的是反向工程  大致步骤是 1. 在 Data Source Emplorer中新建数据库的Database Connction 2. 在Hibernate Configration中Add Configration,选择第一步创建的DB Connection 3. Window → Customize Perspective → Commond Groups Availablity

无人问津的博客 697

hibernate3 二级缓存一些注意的地方

<br />  1.Hibernate3的二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;<br />    2.sessionFactory级别的缓存,需要手动配置;所有的session可以共享sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)<br /> 

xiashan17的专栏 1147

hibernate4的一些设计上要注意的地方

其实大家都知道用不用框架,都能写出系统出来。。 但好不好管理,就是另当别论。 曾经有个项目经理跟我讲过:如果一个经验用20年,你这一生,就完了。。。不断总结,不断经历这才是技术牛人的发展路线。 其实,spring与hibernate很多人都在用,但用得好不好,见仁见智。作为刚上路的我,有一些经验。 先说一吓hibernate的设计方面: DAO通常我会抽象一个absDAO把公...

dxking100的博客 127

用hibernate操作数据库注意地方

mysql没有关键字提示功能,使我在今天开发项目时候,遇到这样的问题 Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version...

hi2008111的专栏 157
上一篇: 测试Flash播放器
下一篇: Hibernate的缓存机制介绍
bug_bug
博客等级 码龄20年 5粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值