Hibernate
Posted qzcn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate相关的知识,希望对你有一定的参考价值。
1、技术概述,描述这个技术是做什么?学习该技术的原因,技术的难点在哪里。控制在50-100字内。
Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象!
2、技术详述,描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述。可以再细分多个点,分开描述各个部分。
在DAO层操作XML,将数据封装到XML文件上,读写XML文件数据实现CRUD
在DAO层使用原生JDBC连接数据库,实现CRUD
嫌弃JDBC的ConnectionStatementResultSet等对象太繁琐,使用对原生JDBC的封装组件-->DbUtils组件
publicstaticvoidmain(String[] args) {
//创建对象
User user = new User();
user.setPassword("123");
user.setCellphone("122222");
user.setUsername("nihao");
//获取加载配置管理类
Configuration configuration = new Configuration();
//不给参数就默认加载hibernate.cfg.xml文件,
configuration.configure();
//创建Session工厂对象
SessionFactory factory = configuration.buildSessionFactory();
//得到Session对象
Session session = factory.openSession();
//使用Hibernate操作数据库,都要开启事务,得到事务对象
Transaction transaction = session.getTransaction();
//开启事务
transaction.begin();
//把对象添加到数据库中
session.save(user);
//提交事务
transaction.commit();
//关闭Session
session.close();
}
3、技术使用中遇到的问题和解决过程。要求问题的描述和解决有一定的内容,不能草草概括。要让遇到相关问题的人看了你的博客之后能够解决该问题。
映射出错,基于外键的双向1-N关联。
注解@OneToMany
注解属性fetch - 配置加载方式(JPA)。取值有FetchType.EAGER - 及时加载,多对一默认是Fetch.EAGER
FetchType.LAZY - 延迟加载,一对多和多对多默认是Fetch.LAZY
cascade - 设置级联方式,取值(默认值none)有:
CascadeType.PERSIST - 保存
CascadeType.REMOVE - 删除
CascadeType.MERGE - 修改
CascadeType.REFRESH - 刷新
CascadeType.ALL - 全部
targetEntity :关联实体类名,一般不需要写。
mappedyBy: 关联实体的属性名,该属性指定关联实体中哪个属性可引用到当前实体。
@JoinColumn - 用于描述一个关联的字段,映射外键列。主要属性有:
name : 外键列的名称。
referencedColumnName: 关联的实体的主键一般是用来做外键的。但如果此时不想主键作为外键,则需要设置referencedColumnName属性。
unique:unique=true, 意味着1-1关联
在N的一端的数据表里增加一个外键列即可,因此应该在使用@ManyToOne注解的同时,使用@JoinColumn来映射外键列。
addresses = new HashSet<>();
在1的一端则需要使用@OneToMany注解来修饰代表关联实体的属性。通常不应该允许1的一端控制关联关系,而应该由N的一端来控制关联关系,因此应该在@OneToMany注解使用指定mappedBy属性
// 定义该Address实体关联的Person实体
@ManyToOne(targetEntity=Person.class)
// 定义名为person_id外键列,该外键列引用person_inf表的person_id列。
@JoinColumn(name="person_id" , referencedColumnName="person_id"
, nullable=false)
private Person person;
// 定义该Person实体所有关联的Address实体
// 指定mappedBy属性表明该Person实体不控制关联关系
@OneToMany(targetEntity=Address.class
, mappedBy="person")
private Set
4、进行总结。
该技术在多表关联中十分有用。
5、列出参考文献、参考博客(标题、作者、链接)。
Hibernate
概述:W3cschool
以上是关于Hibernate的主要内容,如果未能解决你的问题,请参考以下文章
使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)
Hibernate CriteriaQuery where - ManyToOne 字段
Hibernate + MySQL:如何为数据库和表设置编码 utf-8
hibernate在使用getCurrentSession时提示no session found for current thread