操纵持久化对象

  • Post author:
  • Post category:其他




操纵持久化对象





1.




理解



session



的缓存





2.








Hibernate



应用中



java



对象的状态




2







1



临时对象的特征




2







2



持久化对象的特征




2







3



游离对象的特征





3.



Session



的保存、更新、删除、查询方法




3







1 Save()



方法




3







2 update()



方法




3







3 saveOrupdate()



方法




3







4 load()







get()



方法




3







5 delete()



方法



4


.组成关系






session



的缓存






,当



session







save



方法持久化一个对象时



,



对象被加入到



session



的缓存中



,



只要



session



的缓存还没有被清空



,



对象仍然处于生命周期中



,







session







load()



方法从数据库中加载一个对象时



,session



先判断缓存中是否已经存在这个对象



,



如果存在就不需要到数据库中检索



.





以下代码通过



load()



方法加载数据到缓存中







Session session = HibernateSessionFactory.

getSession

();





Transaction tx = session.beginTransaction();





Person person =



new



Person();





person.setPersonName(


“jack”


);





person.setEmail(


“jack@sdi.com”


);





person.setTel(


“237229242”


);





session.save(person);





Person person1 = (Person)session.load(Person.



class



,






person.getPersonid());





tx.commit();





session.close();




临时对象的特征



:




1.










不处于



Session



缓存中



,



不被任何一个



Session



实例关联合





2.










在数据库中没有对应的记录



.


在以下情况



JAVA



对象进入临时状态





1.






通过



new



操作符创建的



java



对象



,



他不和数据库中的任何记录对














2.





session







delete( )



方法能使一个持久化对象或者游离对象转变为临时对象



.


以下代码演示了将一个持久化对象转换为临时对象



.




Person

person1

= (Person)session.load(Person.



class



,









new



Integer(45));





session.delete(

person1

);






持久化对象的特征



:




1.






位于一个



session



实例的缓存中



,



持久化对象总是被一个



session



关联





2.






持久化对象和数据库中的相关记录对应



.




3.





Session save()



方法把临时对象转换为持久化对象





4.





session







load()



或者



get()



返回的对象处于持久化对象





5.





session







find



方法返回的



List()



集合中存放的都是持久化对象






以下代码演示一个



java



对象同时被多个



session



关联



.


Session session = HibernateSessionFactory.

getSession

();



Session session1 = HibernateSessionFactory.

getSession

();



Transaction tx1 = session1.beginTransaction();



Transaction tx = session.beginTransaction();








Person person1 = (Person)session.load




(Person.



class



,



new



Integer(47));



session1.delete(person1);



tx.commit();



tx1.commit();



session.close();



session1.close();



游离对象的特征



:


  1. 不在位于



    Session



    的缓存中



    ,



    游离对象不被



    Session



    关联



    .


  2. 游离对象是由持久化对象转变过来的



    ,



    在数据库中可能还存在与它对应的记录










游离对象和临时对象的区别


:


游离对象由持久化对象转变过来的


,


在数据库中还存






在对应的记录


,


而临时对象在数据库中没有对应的记录


.



Session







保存


,


更新


,


删除


,


查询方法


.



以下代码调用


session





save


把临时对象转换为持久化对象后


,


把数据库中的数据更新


.




Person person = new Person();




person.setPersonName(“mike”);




person.setEmail(“mike@sdi.com”);




person.setTel(“092423234”);




session.save(person);





person.setTel(


“723764234”


);




transaction.commit();





session.close();



以下代码演示了不同


session


中的对象传送


:





Session session = HibernateSessionFactory.getSession();





Transaction transaction = session.beginTransaction();





Person person = new Person();





person.setPersonName(“mike”);





person.setEmail(“mike@sdi.com”);





person.setTel(“092423234”);





session.save(person);





person.setTel(“723764234”);





transaction.commit();





session.close();










Session session1 = HibernateSessionFactory.getSession();





Transaction tx = session1.beginTransaction();





person.setPersonName(“scott”);





person.setEmail(“scott@sdi.com”);





person.setTel(“297423234”);





session1.save(person);





tx.commit();












select-before-update


=


“true”




当修改对象的属性时才执行


update


语句


.



Session





saveOrUpdate()


方法包含了


save()





update()


方法的功能


,


如果传入的参数是临时对象


,


就调用


save()


方法


,


如果传入的参数是游离对象


,


就调用


update()


方法


.



Session load()





get()


方法区别


:


当数据库中不存在与


OID


对应的记录时


,load()


方法抛出



org.hibernate.ObjectNotFoundException




异常




,




Get()


方法返回


null .








组成关系:以下代码演示了


Persons


对象和


Names


对象的组合关系:



Persons.hbm.xml










<


component


name


=


“names”


class


=


“com.test.pojo.Names”


>









<


property


name


=


“initial”


type


=


“string”


>









<


column


name


=


“initial”


length


=


“30”


/>









</


property


>









<


property


name


=


“firstName”


type


=


“string”


>









<


column


name


=


“firstName”


length


=


“50”


/>









</


property


>









<


property


name


=


“lastName”


type


=


“string”


>









<


column


name


=


“lastName”


length


=


“50”


/>









</


property


>







</


component


>



查询组合关系字段:




Persons persons = (Persons) session




.createQuery(




“from Persons p where p.names.firstName = :firstName and p.names.lastName = :lastName “)




.setString(“firstName”, “jeff”).setString(“lastName”, “worong”)




.uniqueResult();






实体类型和值类型的区别在于


:


实体类型有


OID ,


而值类型没有


OID



版权声明:本文为RenJanely原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。