HibernateClinic.java
上传用户:dezhong
上传日期:2022-08-10
资源大小:167k
文件大小:3k
源码类别:

Java编程

开发平台:

Java

  1. package org.springframework.samples.petclinic.hibernate;
  2. import java.util.Collection;
  3. import org.hibernate.SessionFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.samples.petclinic.Clinic;
  6. import org.springframework.samples.petclinic.Owner;
  7. import org.springframework.samples.petclinic.Pet;
  8. import org.springframework.samples.petclinic.PetType;
  9. import org.springframework.samples.petclinic.Vet;
  10. import org.springframework.samples.petclinic.Visit;
  11. import org.springframework.stereotype.Repository;
  12. import org.springframework.transaction.annotation.Transactional;
  13. /**
  14.  * Hibernate implementation of the Clinic interface.
  15.  *
  16.  * <p>The mappings are defined in "petclinic.hbm.xml", located in the root of the
  17.  * class path.
  18.  *
  19.  * <p>Note that transactions are declared with annotations and that some methods
  20.  * contain "readOnly = true" which is an optimization that is particularly
  21.  * valuable when using Hibernate (to suppress unnecessary flush attempts for
  22.  * read-only operations).
  23.  *
  24.  * @author Juergen Hoeller
  25.  * @author Sam Brannen
  26.  * @author Mark Fisher
  27.  * @since 19.10.2003
  28.  */
  29. @Repository
  30. @Transactional
  31. public class HibernateClinic implements Clinic {
  32. @Autowired
  33. private SessionFactory sessionFactory;
  34. @Transactional(readOnly = true)
  35. @SuppressWarnings("unchecked")
  36. public Collection<Vet> getVets() {
  37. return sessionFactory.getCurrentSession().createQuery("from Vet vet order by vet.lastName, vet.firstName").list();
  38. }
  39. @Transactional(readOnly = true)
  40. @SuppressWarnings("unchecked")
  41. public Collection<PetType> getPetTypes() {
  42. return sessionFactory.getCurrentSession().createQuery("from PetType type order by type.name").list();
  43. }
  44. @Transactional(readOnly = true)
  45. @SuppressWarnings("unchecked")
  46. public Collection<Owner> findOwners(String lastName) {
  47. return sessionFactory.getCurrentSession().createQuery("from Owner owner where owner.lastName like :lastName")
  48. .setString("lastName", lastName + "%").list();
  49. }
  50. @Transactional(readOnly = true)
  51. public Owner loadOwner(int id) {
  52. return (Owner) sessionFactory.getCurrentSession().load(Owner.class, id);
  53. }
  54. @Transactional(readOnly = true)
  55. public Pet loadPet(int id) {
  56. return (Pet) sessionFactory.getCurrentSession().load(Pet.class, id);
  57. }
  58. public void storeOwner(Owner owner) {
  59. // Note: Hibernate3's merge operation does not reassociate the object
  60. // with the current Hibernate Session. Instead, it will always copy the
  61. // state over to a registered representation of the entity. In case of a
  62. // new entity, it will register a copy as well, but will not update the
  63. // id of the passed-in object. To still update the ids of the original
  64. // objects too, we need to register Spring's
  65. // IdTransferringMergeEventListener on our SessionFactory.
  66. sessionFactory.getCurrentSession().merge(owner);
  67. }
  68. public void storePet(Pet pet) {
  69. sessionFactory.getCurrentSession().merge(pet);
  70. }
  71. public void storeVisit(Visit visit) {
  72. sessionFactory.getCurrentSession().merge(visit);
  73. }
  74. }