上一页 1 2 3 4 5 6 ··· 8 下一页
摘要: 无论load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()方法可以强制清除session缓存flush()强制让缓存的内容与数据库的内容做同步SchemaExport:在程序里面控制生成建表语句。实际工作中可以不用hbm2ddl.auto这个配置,手动建表 @Test public void testSchemaExport(){ new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);; }第一个true表示是否打印出... 阅读全文
posted @ 2013-12-09 09:23 李鬼989 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 讲update不是讲这个方法,而是讲什么时候会更新数据库里面的内容。什么情况下用更新?1.可以更新一个detachd状态对象,把它变成persistent,同时数据库里进行更新2.更新transient状态的对象会报错,但是更新自己设定好的ID的transient对象可以(前提是数据库里有对应的这条数据记录)有一个问题,它会将所有字段都进行更新,效率不高。是否可以做到只更新改过的字段呢?有三种方法1.修改注解,在model里面加@Column( updatable=false)。这种方式不好,因为它不灵活2.在xml配置文件上写一个dynamic-update="true" 阅读全文
posted @ 2013-12-09 08:59 李鬼989 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 在测update方法之前,我们看读取:get和load。load就是从数据库里取一条记录,取到内存里,把一条记录转化成对应的对象。测试代码:package hjj.lch.hibernate.model;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;publi 阅读全文
posted @ 2013-12-09 08:55 李鬼989 阅读(171) 评论(0) 推荐(0) 编辑
摘要: session管理一个数据库的任务单元,简单来说就是来帮我们管理数据库的增删改查的操作,一个session里面可以执行一系列的增删改查,然后它会帮我们放到一个事务里面,已提交,数据库的状态就产生变化了。通过save我们认识了三种状态,分别是transient、persistent、detachd,下面来看delete方法。delete(Object object) 从数据库中删除一个持久状态对象,那么缓存中会不会清楚呢?一个persistent状态的对象delete后就变成transient状态了,缓存中没有了。从数据库里删了,它的ID号就没了,当然变成transient状态了,所以缓存里就清 阅读全文
posted @ 2013-12-08 13:38 李鬼989 阅读(220) 评论(0) 推荐(0) 编辑
摘要: Hibernate三种状态之一:临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;Hibernate三种状态之二:持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;Hibernate三种状态之三:游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;下面举例说明:一,Session.save(user)运行机理 阅读全文
posted @ 2013-12-08 13:12 李鬼989 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 在current_session_context_class里面常取的有thread和jta两种,thread 是在当前线程里面找,如果指定thread就是使用connection直接管理事务,但是分布式事务使用一个connection是管理不了的。所以事务有两种,一种是依赖于数据库本身的,只针对一个数据库,可以称为connection事务,另外一种是JTA事务,针对于分布式事务管理。JTA是java里面规定的一种标准的管理事务的API ,叫java transaction api。如果使用getCurrentSession,就必须设置current_session_context_class 阅读全文
posted @ 2013-12-04 11:15 李鬼989 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 1.Configuration 进行配置信息的管理 用来产生SessionFactory 可以在configure方法中指定hibernate配置文件 只需要关注一个方法即:buildSessionFactory()2.SessionFactory 管理连接池 用来产生Session,没产生一个session,就给它一个数据库连接 Session session = sessionFactory.openSession();与Session session = sessionFactory.getCurrentSession();的区别openSession永远是创建新的Sess... 阅读全文
posted @ 2013-12-03 16:47 李鬼989 阅读(151) 评论(0) 推荐(0) 编辑
摘要: ID生成策略:主键手工设定很不方便,在我们实际工作中在MySQL里面用自增字段auto increment,在oracel中一般用sequence。所以把表建成auto increment,对于类里面对象的对应的值就不能指定了,得靠程序或数据库自动生成,hibernate或JPA就实现了这样的功能,我们可以通过设置告诉这个字段怎么生成,这样写程序的时候就不用设定了。这个就叫ID的生成策略。动手实验:使用xml时,常用native根据底层数据库的能力选择identity, sequence 或者hilo中的一个。identity对DB2,MySQL, MS SQL Server, Sybase和 阅读全文
posted @ 2013-12-02 16:30 李鬼989 阅读(662) 评论(0) 推荐(0) 编辑
摘要: 7.表名和类名不同,对表名进行配置 用annotation时,实体类名和数据库表名不同时,可以用@Table(name="_teacher")注明 ,当映射到Teacher这个类时就会去找数据库中_teacher这个表 用xml文件,用table指明表名8.字段名和属性名相同 默认@Basic,就是说字段上没写任何注解时,相当于加了@Basic这个注解9.字段名和属性名不同 用annotation时,用@Column(name="_name")指定对应的字段名 在xml里面,用 10.不需要持久化的字段 使用annotation时,用@Transient 阅读全文
posted @ 2013-12-02 13:13 李鬼989 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 1 介绍MySQL的图形化客户端 SQL Manager 2007 Lite for MySSQL2 hibernate.cfg.xml: hbm2ddl.auto create 表示如果数据库中没有表,会根据annotation或xxx.hbm.xml文件自动创建。 update 表示如果程序中增加了一个字段,数据库中存在该表,会自动加上该字段。 create-drop 表示在显式关闭SessionFactory时,将drop掉数据库schema。 validate 表示创建好了表了,在往里面插数据或者做任何数据操作之前,都会自动检查数据库里面的表和我们的配置是不是对应得上。 cr... 阅读全文
posted @ 2013-11-26 22:51 李鬼989 阅读(218) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 8 下一页