Hibernate
初学者的笔记
OVO_LQ_Start
一个弱小的菜鸟在瑟瑟发抖
展开
-
HIbernate 事务并发处理 悲观锁&&乐观锁
事务并发的问题1.脏读(dirty read):一个事务读到了另一个未提交的事务2.不可重复读(non-repeatable read):一个事务中两次读同一行数据,可是这两次读到的数据不一样3.幻读(phantom read):一个事务中两次查询,但第二次查询比第一次查询多了或少了几行或几列数据事务隔离级别有4种:1 - read-uncommitted2 - read-commit...原创 2020-01-31 00:00:52 · 156 阅读 · 0 评论 -
Hibernate 一级缓存 二级缓存 查询缓存
一级缓存同一个session,session缓存@Test public void testCache1() { Session session = sf.openSession(); session.beginTransaction(); Category c = (Category)session.load(Category.class, 1); System.out.p...原创 2020-01-29 19:01:55 · 145 阅读 · 0 评论 -
Hibernate List和itreate区别
List/* * list直接取数据库中把所用对象找出来, * 再次查询的时候会直接更新缓存再一次直接从数据库中把对象中找出 */ @Test public void testQueryList(){ Session session = sf.openSession(); session.beginTransaction(); List<Category>...原创 2020-01-29 18:44:09 · 139 阅读 · 0 评论 -
Hibernate 1+n问题
问题简述4个类Category ,topic ,msg,msginfo。都是多对一的关系获取topic时,把topic有导航关系的数据全部取出来解决办法把fetchtapy设置为lazy,需要在发出。(不用使用关联对象的情况下使用)使用@batchSize(size=5),在获取数据时一次发出5条。如果设置10,则就发一次就可以了。但是不灵活。使用join fetch,建立外连接(...原创 2020-01-29 18:40:45 · 132 阅读 · 0 评论 -
Hibernate @NamedQueries
JPA的命名查询实际上就是给查询语句起个名字,执行查询的时候就是直接使用起的这个名字,避免重复写JPQL语句,使查询在代码中得到更多的重用。1、使用@NamedQuery注解在实体类中定义命名查询。@NamedQuery(name=“findAllUser”,query=“SELECT u FROM User u”)@NamedQuery中的属性name指定命名查询的名称,query属性指定...原创 2020-01-29 18:17:00 · 663 阅读 · 0 评论 -
Hibernate QBC与QBE
创建类Categogy类模块package com.hibernate.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Category { private int id;...原创 2020-01-29 18:14:20 · 225 阅读 · 0 评论 -
Hibernate QL语句测试用例
package com.hibernate.model;import java.util.Date;import java.util.List;import org.hibernate.Query; import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.M...原创 2020-01-29 17:51:59 · 271 阅读 · 0 评论 -
Hibernate继承映射的三种方式
单表设计(SINGLE_TABLE)将所有的表都放入父类的一张表中, 需要一个DiscriminatorColumn来区别不同的子类。创建Person,Student,Teacher类Student和Teacher都继承Person。Person类中使用@Inheritance(strategy=InheritanceType.SINGLE_TABLE)指定表的设计模式@Discrimi...原创 2020-01-29 17:47:21 · 216 阅读 · 0 评论 -
Hibernate 一对多的CRUD
Save方法1.保存多的一方,会自动把关联表(一的一方)保存。public void testSaveUser(){ User u = new User(); u.setName("u1"); Group g = new Group(); g.setName("g1"); u.setGroup(g); User u2 = new User(); u2.setN...原创 2020-01-29 16:15:28 · 386 阅读 · 0 评论 -
Hibernate的一对多,多对一以及多对多
一对多和多对一创建两个类Group和User(一个小组有多个用户形成多对一和一对多的关系)1.多对一创建Group字段private Group group;在getGroup()方面添加@manyToOne注解@ManyToOne public Group getGroup() { return group; }2.一对多创建Group类时创建一个Set集合来保存多的...原创 2020-01-29 15:44:01 · 362 阅读 · 0 评论 -
Hibernate一对一 ,联合主键以及组件联合
一对一创建两个类Husband和Wilfe类在Husband类中创建一个Wife属性private Wife wife;创建get,set方法。在get方式上面添加@OneToOne注解@OneToOne //注解本表中是指向另一个表的外键 @JoinColumn(name="wifeid") public Wife getWife() { return wife; }...原创 2020-01-29 14:33:45 · 163 阅读 · 0 评论 -
Hibernate 核心API
一.三种对象状态transient:内存中有一个对象,没有id,缓存中也没有persistent:内存中有,缓存中有,数据库中有(id)detached:内存中有,缓存中没有,数据库中有id二.CoreAPI1.configure读取hibernate.cfg.xml文件2.load与get功能都是从数据库中查找区别:1.load返回的时代理对象,等到真正的用到对象的内容时才会发出...原创 2020-01-29 14:09:28 · 138 阅读 · 0 评论 -
Hibernate主键生成策略
主键生成策略1.idenitty:指定使用数据库里面的ID自增长策略2.sequence:使用序列的实现ID生成策略,主要用于有序列的数据库。 如:Oracle,DB2,如果不支持序列的数据库(如:MYSQL),该策略会使用一个表模拟序列3. native:使用数据库本地的策略,就是数据库里面使用怎么样的策略就用什么策略,HIbernate不做任何的判断4. uuid:就是数据库的主键是使...原创 2020-01-29 13:42:50 · 123 阅读 · 0 评论 -
Hibernate联合主键
一。联合主键mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。二。联合主键的实现1.创建一个Student类。package com.hibernate.model;public class Student { //联合主键,保证主键的...原创 2020-01-29 13:25:04 · 444 阅读 · 0 评论 -
Hibernate的环境搭建
一.导入jar包1.创建jar包分类点击window打开Preference选择java-buildPath-UserLibraries,点击new新建,点击add jars往其中添加jars文件2.导入的jar包二.hibernate.cfg.xml文件配置<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibern...原创 2020-01-29 13:01:33 · 163 阅读 · 0 评论