public static void main(String[] args) {
User user = new User();
user.setBirthday(new Date());
user.setName("wang.beyond");
addUser(user);
User user1 = getUser1(user.getId());
System.out.println("id: "+user1.getId());
System.out.println("name: "+user1.getName());
System.out.println("birthday: "+user1.getBirthday());
System.out.println("end");
}
-----------------------------------------
/**
* 用懒加载的方法得到数据操作
* */
static User getUser1(int id){
Session s = null;
Transaction tx = null;
try {
/**生成session*/
s = HibernateUtil.getSession();
User user = (User)s.load(User.class, id);
System.out.println("id: "+user.getId());
return user;
}finally{
if(s != null)
s.close();
}
}为什么在懒加载函数User user = (User)s.get(User.class, id); 后面加一句System.out.println("id: "+user.getId()); 在main函数就能取到相应的数据了
有人说加载了user.getId()就表示告诉hibernate这个时候要读取数据 我把System.out.println("id: "+user.getId()); 删了 main函数里面还是有类似的方法 为什么就不能取到数据?
User user = new User();
user.setBirthday(new Date());
user.setName("wang.beyond");
addUser(user);
User user1 = getUser1(user.getId());
System.out.println("id: "+user1.getId());
System.out.println("name: "+user1.getName());
System.out.println("birthday: "+user1.getBirthday());
System.out.println("end");
}
-----------------------------------------
/**
* 用懒加载的方法得到数据操作
* */
static User getUser1(int id){
Session s = null;
Transaction tx = null;
try {
/**生成session*/
s = HibernateUtil.getSession();
User user = (User)s.load(User.class, id);
System.out.println("id: "+user.getId());
return user;
}finally{
if(s != null)
s.close();
}
}为什么在懒加载函数User user = (User)s.get(User.class, id); 后面加一句System.out.println("id: "+user.getId()); 在main函数就能取到相应的数据了
有人说加载了user.getId()就表示告诉hibernate这个时候要读取数据 我把System.out.println("id: "+user.getId()); 删了 main函数里面还是有类似的方法 为什么就不能取到数据?
离开了getUser1方法 session就关闭了
根本就没关系 只有在session生命周期内 user.getName() user.get...后才会去查询数据库
spring容器在最开始不是要把里边所有的bean要初始化吗?
设置为lazy为true后,就不初始化这个bean,等到用到它的时候在进行加载,也可以理解为是一种合理利用资源的方式吧,等到用的时候才用!
Session只有在持久的状态时才能等到数据,
游离状态时是不能取到数据的。static User getUser1(int id){
Session s = null;
Transaction tx = null;
User user = new User();//初始化
/**生成session*/
s = HibernateUtil.getSession();
user = (User)s.load(User.class, id);//这时的user处于游离状态;
System.out.println("id: "+user.getId());
s.close();
return user;//持久的试试行不。
2、Persistent 持久化状态
3、Detached 托管状态
save、update操作时 1-->2 3-->2 也就是持久化操作
delete、clear、close操作时 2-->1 2-->3 持久化状态转为透明或托管状态