定义:是JDBC
Hibernate
(1.在数据库中是否有对应的数据
(2.是否与
在数据库中对应的数据,与连接操作。
在数据库中对应的数据,与连接操作。
在数据库中对应的数据,与连接操作。
三种状态之间的互相转换:
Session
都是从数据库中查询数据(只能根据
查询。如果没有要查找的数据,那么。
Load()查询。如果没有要查找的数据,。
SessionFactory
SessionFactory
(1.重量级组件
(2.一个项目中,如果只用了一个数据库,那么尽量只能出现一次。
(3.线程安全的
(1.轻量级组件
(2.一个项目中可以出现多次
(3.线程非安全的
update
如果对象已经在本session中持久化了,不做任何事
如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常
如果对象没有持久化标识(identifier)属性,对其调用save()
如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()
如果对象是附带版本信息的(通过<version>或<timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。
否则update() 这个对象
关联关系:
多
多2
Lazy
3.0为(
只有在
* <class>
* <property>
* <set>/<list>
* <one-to-one>/<many-to-one>
:
*
*
* //
System.out.println("group id=" + group.getId());
这里有一个问题,为什么加载主键的时候不需要发出
集合
*
*
*
,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其集合元素的数据
false:
extra:
并不会去加载整个集合的数据,而是发出一条聪明的
懒加载策略。可以取值为:
false:
proxy:
no-proxy:
注意:在
Cascade:
定义的是关系两端对象到。
它有以下五个值可以选择:
所有情况下均进行关联操作。
所有情况下均不进行关联操作。这是。
在执行save/update/saveOrUpdate时进行关联操作。()
在执行delete时进行关联操作。
Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items.
现
当
将变成孤儿节点
java
Inverse:
定义的是关系和对象的级联关系。
在一对多中
例如:
最好是让员工来维护关系
如果让部门来维护关系,让部门去找每一个员工,要难的多。
所以在中最好让方为(
在中任意一方为都可以。
但是不能两方都为
有助于性能的改善。
本地查询:
命名查询:
在
然后在java
createQuery
from实体类名而不是数据库表名
条件也不是列名而是实体类中属性名
setParameter()
String sql=”from Student where name:name”;
createCriteria
.lt("age", "30"));//
Restrictions.between--->
Restrictions.like--->
Restrictions.in--->