hibernate注解demo

用一个简单的例子,来记一下,hibernate的部分注解的使用和配置。我这里还是举出一些最常见的,如单向和双向的一对多,单向和双向的多对多。新建个Java工程,做测试类来说明,我打算这样干。

首先是单向的一对多,代码如下,先是两个实体类:

Java代码
  1. packagecn.serup.model;
  2. importjava.util.Set;
  3. importjavax.persistence.Entity;
  4. importjavax.persistence.GeneratedValue;
  5. importjavax.persistence.Id;
  6. importjavax.persistence.JoinColumn;
  7. importjavax.persistence.OneToMany;
  8. @Entity
  9. publicclassOrganization{
  10. privateintid;
  11. privateStringorgName;
  12. privateSet<Company>company;
  13. @OneToMany
  14. @JoinColumn(name="orgid")
  15. /**
  16. *一对多注解@OneToMany(单向)
  17. *如果只写@OneToMany的话,hibernate会建一张中间表来
  18. *维护他们之间的关系,
  19. *加上@JoinColumn(name="orgid"),则不会建中间表,他会在
  20. *多的一端加上外键orgid,来维护他们之间的关系
  21. */
  22. publicSet<Company>getCompany(){
  23. returncompany;
  24. }
  25. @Id
  26. @GeneratedValue
  27. publicintgetId(){
  28. returnid;
  29. }
  30. publicStringgetOrgName(){
  31. returnorgName;
  32. }
  33. publicvoidsetCompany(Set<Company>company){
  34. this.company=company;
  35. }
  36. publicvoidsetId(intid){
  37. this.id=id;
  38. }
  39. publicvoidsetOrgName(StringorgName){
  40. this.orgName=orgName;
  41. }
  42. }

Java代码
  1. packagecn.serup.model;
  2. importjavax.persistence.Entity;
  3. importjavax.persistence.GeneratedValue;
  4. importjavax.persistence.Id;
  5. @Entity
  6. publicclassCompany{
  7. privateintid;
  8. privateStringcompayName;
  9. @Id
  10. @GeneratedValue
  11. publicintgetId(){
  12. returnid;
  13. }
  14. publicvoidsetId(intid){
  15. this.id=id;
  16. }
  17. publicStringgetCompayName(){
  18. returncompayName;
  19. }
  20. publicvoidsetCompayName(StringcompayName){
  21. this.compayName=compayName;
  22. }
  23. }

然后,测试类代码如下:

Java代码
  1. packagecn.serup.hibernate.test;
  2. importjava.util.HashSet;
  3. importjava.util.Iterator;
  4. importjava.util.Set;
  5. importorg.hibernate.Session;
  6. importorg.hibernate.SessionFactory;
  7. importorg.hibernate.cfg.AnnotationConfiguration;
  8. importorg.hibernate.tool.hbm2ddl.SchemaExport;
  9. importorg.junit.AfterClass;
  10. importorg.junit.BeforeClass;
  11. importorg.junit.Test;
  12. importcn.serup.model.Company;
  13. importcn.serup.model.Organization;
  14. publicclassMany2One{
  15. privatestaticSessionFactorysessionFactory;
  16. @SuppressWarnings("unchecked")
  17. @Test
  18. publicvoidtestSaveOne2One(){
  19. Organizationo=newOrganization();
  20. o.setOrgName("谷度培训机构");
  21. Companyc=newCompany();
  22. c.setCompayName("广州分公司");
  23. Companyc1=newCompany();
  24. c1.setCompayName("成都分公司");
  25. Companyc2=newCompany();
  26. c2.setCompayName("天津分公司");
  27. Setset=newHashSet();
  28. set.add(c);
  29. set.add(c1);
  30. set.add(c2);
  31. o.setCompany(set);
  32. Sessionsession=sessionFactory.getCurrentSession();
  33. session.beginTransaction();
  34. session.save(o);
  35. session.save(c);
  36. session.save(c1);
  37. session.save(c2);
  38. session.beginTransaction().commit();
  39. }
  40. @SuppressWarnings("unchecked")
  41. @Test
  42. publicvoidtestLoadOne2One(){
  43. Sessionsession=sessionFactory.getCurrentSession();
  44. session.beginTransaction();
  45. Organizationo=(Organization)session.load(Organization.class,1);
  46. System.out.println(o.getId()+""+o.getOrgName());
  47. Setlist=o.getCompany();
  48. for(Iteratorit=list.iterator();it.hasNext();){
  49. Companyc=(Company)it.next();
  50. System.out.println(c.getId()+""+c.getCompayName());
  51. }
  52. session.beginTransaction().commit();
  53. }
  54. @Test
  55. publicvoidtestDeleteOne2One(){
  56. Sessionsession=sessionFactory.getCurrentSession();
  57. session.beginTransaction();
  58. //Companyc=(Company)session.load(Company.class,1);
  59. //session.delete(c);
  60. session.beginTransaction().commit();
  61. }
  62. @BeforeClass
  63. publicstaticvoidbeforeClass(){
  64. newSchemaExport(newAnnotationConfiguration().configure())
  65. .create(true,true);
  66. sessionFactory=newAnnotationConfiguration().configure()
  67. .buildSessionFactory();
  68. }
  69. @AfterClass
  70. publicstaticvoidafterClass(){
  71. sessionFactory.close();
  72. }
  73. }

最后是hibernate的cfg.xml配置,代码如下:

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEhibernate-configurationPUBLIC
  3. "-//Hibernate/HibernateConfigurationDTD3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <propertyname="hibernate.connection.password">123456</property>
  9. <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  10. <propertyname="hibernate.connection.username">root</property>
  11. <propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  12. <propertyname="show_sql">true</property>
  13. <!--独立线程运行,如果通过getCurrentSession()来获得Session,需要设置如下-->
  14. <propertyname="current_session_context_class">thread</property>
  15. <!--<propertyname="hibernate.hbm2ddl.auto">create</property>-->
  16. <!--映射持久化类-->
  17. <mappingclass="cn.serup.model.Company"/>
  18. <mappingclass="cn.serup.model.Organization"/>
  19. </session-factory>
  20. </hibernate-configuration>

以上则是单向的一对多,即company里有organization的对象,organization里没有其他关联对象。

下面就是双向的一对多,即company里有organization的对象,organization里有company的set。只需要修改上面的代码即可,实体类代码如下(就是修改一点点就可以了):

Java代码
  1. packagecn.serup.model;
  2. importjava.util.Set;
  3. importjavax.persistence.Entity;
  4. importjavax.persistence.GeneratedValue;
  5. importjavax.persistence.Id;
  6. importjavax.persistence.JoinColumn;
  7. importjavax.persistence.OneToMany;
  8. @Entity
  9. publicclassOrganization{
  10. privateintid;
  11. privateStringorgName;
  12. privateSet<Company>company;
  13. @OneToMany(mappedBy="org")
  14. @JoinColumn(name="orgid")
  15. /**
  16. *一对多双向,在一的一端中设置mappedBy
  17. *说明多的一端为主导
  18. *如果指定了外键字段名称,则多的一端也需要指定相同的字段名称
  19. */
  20. publicSet<Company>getCompany(){
  21. returncompany;
  22. }
  23. publicvoidsetCompany(Set<Company>company){
  24. this.company=company;
  25. }
  26. publicStringgetOrgName(){
  27. returnorgName;
  28. }
  29. publicvoidsetOrgName(StringorgName){
  30. this.orgName=orgName;
  31. }
  32. @Id
  33. @GeneratedValue
  34. publicintgetId(){
  35. returnid;
  36. }
  37. publicvoidsetId(intid){
  38. this.id=id;
  39. }
  40. }

Java代码
  1. packagecn.serup.model;
  2. importjavax.persistence.Entity;
  3. importjavax.persistence.GeneratedValue;
  4. importjavax.persistence.Id;
  5. importjavax.persistence.JoinColumn;
  6. importjavax.persistence.ManyToOne;
  7. @Entity
  8. publicclassCompany{
  9. privateintid;
  10. privateStringcompayName;
  11. privateOrganizationorg;
  12. @ManyToOne
  13. @JoinColumn(name="orgid")
  14. /**
  15. *一对多双向
  16. *需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")
  17. *也可以不指定,如果在多的一端不指定,则一的一端也不能指定
  18. *否则为生成两个外键
  19. */
  20. publicOrganizationgetOrg(){
  21. returnorg;
  22. }
  23. publicvoidsetOrg(Organizationorg){
  24. this.org=org;
  25. }
  26. @Id
  27. @GeneratedValue
  28. publicintgetId(){
  29. returnid;
  30. }
  31. publicvoidsetId(intid){
  32. this.id=id;
  33. }
  34. publicStringgetCompayName(){
  35. returncompayName;
  36. }
  37. publicvoidsetCompayName(StringcompayName){
  38. this.compayName=compayName;
  39. }
  40. }

单向的多对多的测试代码如下,至于hibernate的cfg.xml就不用变了:

Java代码
  1. packagecn.serup.hibernate.test;
  2. importjava.util.Iterator;
  3. importjava.util.Set;
  4. importorg.hibernate.Session;
  5. importorg.hibernate.SessionFactory;
  6. importorg.hibernate.cfg.AnnotationConfiguration;
  7. importorg.hibernate.tool.hbm2ddl.SchemaExport;
  8. importorg.junit.AfterClass;
  9. importorg.junit.BeforeClass;
  10. importorg.junit.Test;
  11. importcn.serup.model.Company;
  12. importcn.serup.model.Organization;
  13. publicclassMany2One{
  14. privatestaticSessionFactorysessionFactory;
  15. @Test
  16. publicvoidtestSaveOne2One(){
  17. Organizationo=newOrganization();
  18. o.setOrgName("谷度培训机构");
  19. Companyc=newCompany();
  20. c.setCompayName("广州分公司");
  21. c.setOrg(o);
  22. Companyc1=newCompany();
  23. c1.setCompayName("成都分公司");
  24. c1.setOrg(o);
  25. Companyc2=newCompany();
  26. c2.setCompayName("天津分公司");
  27. c2.setOrg(o);
  28. Sessionsession=sessionFactory.getCurrentSession();
  29. session.beginTransaction();
  30. session.save(o);
  31. session.save(c);
  32. session.save(c1);
  33. session.save(c2);
  34. session.beginTransaction().commit();
  35. }
  36. @SuppressWarnings("unchecked")
  37. @Test
  38. publicvoidtestLoadOne2One(){
  39. Sessionsession=sessionFactory.getCurrentSession();
  40. session.beginTransaction();
  41. Organizationo=(Organization)session.load(Organization.class,1);
  42. System.out.println(o.getId()+""+o.getOrgName());
  43. Setset=o.getCompany();
  44. for(Iteratorit=set.iterator();it.hasNext();){
  45. Companyc=(Company)it.next();
  46. System.out.println(c.getId()+""+c.getCompayName());
  47. }
  48. session.beginTransaction().commit();
  49. }
  50. @Test
  51. publicvoidtestDeleteOne2One(){
  52. Sessionsession=sessionFactory.getCurrentSession();
  53. session.beginTransaction();
  54. //Companyc=(Company)session.load(Company.class,1);
  55. //session.delete(c);
  56. session.beginTransaction().commit();
  57. }
  58. @BeforeClass
  59. publicstaticvoidbeforeClass(){
  60. newSchemaExport(newAnnotationConfiguration().configure())
  61. .create(true,true);
  62. sessionFactory=newAnnotationConfiguration().configure()
  63. .buildSessionFactory();
  64. }
  65. @AfterClass
  66. publicstaticvoidafterClass(){
  67. sessionFactory.close();
  68. }
  69. }

以上则是单向和双向的一对多的配置与测试。下面是单向和双向的多对多的配置和测试。

------------------------------------------------------------------------------------------------------------------------------------

单向的多对多,实体类代码如下:

Java代码
  1. packagecn.serup.model;
  2. importjava.util.HashSet;
  3. importjava.util.Set;
  4. importjavax.persistence.Entity;
  5. importjavax.persistence.GeneratedValue;
  6. importjavax.persistence.Id;
  7. importjavax.persistence.JoinColumn;
  8. importjavax.persistence.JoinTable;
  9. importjavax.persistence.ManyToMany;
  10. @Entity
  11. publicclassUser{
  12. privateintid;
  13. privateStringusername;
  14. privateSet<Role>role=newHashSet<Role>();
  15. @Id
  16. @GeneratedValue
  17. publicintgetId(){
  18. returnid;
  19. }
  20. publicvoidsetId(intid){
  21. this.id=id;
  22. }
  23. publicStringgetUsername(){
  24. returnusername;
  25. }
  26. publicvoidsetUsername(Stringusername){
  27. this.username=username;
  28. }
  29. @ManyToMany
  30. /**
  31. *多对多映射:注解@ManyToMany(单向)
  32. *默认情况下,hibernate会自动的创建一张中间表,
  33. *来维护多对多关系
  34. *默认中间表的名称:user_role中间表,字段的名称user_idrole_id
  35. *如果想更换表名和字段名称,注解如下:
  36. */
  37. @JoinTable(name="t_u_r",
  38. joinColumns={@JoinColumn(name="u_id")},
  39. inverseJoinColumns={@JoinColumn(name="r_id")}
  40. )
  41. publicSet<Role>getRole(){
  42. returnrole;
  43. }
  44. publicvoidsetRole(Set<Role>role){
  45. this.role=role;
  46. }
  47. }

Java代码
  1. packagecn.serup.model;
  2. importjavax.persistence.Entity;
  3. importjavax.persistence.GeneratedValue;
  4. importjavax.persistence.Id;
  5. @Entity
  6. publicclassRole{
  7. privateintid;
  8. privateStringroleName;
  9. /*privateSet<User>user=newHashSet<User>();
  10. @ManyToMany
  11. publicSet<User>getUser(){
  12. returnuser;
  13. }
  14. publicvoidsetUser(Set<User>user){
  15. this.user=user;
  16. }*/
  17. @Id
  18. @GeneratedValue
  19. publicintgetId(){
  20. returnid;
  21. }
  22. publicvoidsetId(intid){
  23. this.id=id;
  24. }
  25. publicStringgetRoleName(){
  26. returnroleName;
  27. }
  28. publicvoidsetRoleName(StringroleName){
  29. this.roleName=roleName;
  30. }
  31. }

测试类代码如下:

Java代码
  1. packagecn.serup.hibernate.test;
  2. importjava.util.HashSet;
  3. importjava.util.Iterator;
  4. importjava.util.Set;
  5. importorg.hibernate.Session;
  6. importorg.hibernate.SessionFactory;
  7. importorg.hibernate.cfg.AnnotationConfiguration;
  8. importorg.junit.AfterClass;
  9. importorg.junit.BeforeClass;
  10. importorg.junit.Test;
  11. importcn.serup.model.Role;
  12. importcn.serup.model.User;
  13. publicclassMany2ManyTest{
  14. privatestaticSessionFactorysessionFactory=null;
  15. @Test
  16. publicvoidtestSaveUR(){
  17. Roler1=newRole();
  18. r1.setRoleName("项目组长");
  19. Roler3=newRole();
  20. r3.setRoleName("项目经理");
  21. Roler2=newRole();
  22. r2.setRoleName("技术总监");
  23. Useru1=newUser();
  24. u1.setUsername("唐骏");
  25. Useru2=newUser();
  26. u2.setUsername("李开复");
  27. Useru3=newUser();
  28. u3.setUsername("柳传志");
  29. Set<Role>s1=newHashSet<Role>();
  30. s1.add(r1);
  31. s1.add(r3);
  32. Set<Role>s2=newHashSet<Role>();
  33. s2.add(r1);
  34. s2.add(r2);
  35. Set<Role>s3=newHashSet<Role>();
  36. s3.add(r1);
  37. s3.add(r2);
  38. s3.add(r3);
  39. u1.setRole(s1);
  40. u2.setRole(s2);
  41. u3.setRole(s3);
  42. Sessionsession=sessionFactory.getCurrentSession();
  43. session.beginTransaction().begin();
  44. session.save(r1);
  45. session.save(r2);
  46. session.save(r3);
  47. session.save(u1);
  48. session.save(u2);
  49. session.save(u3);
  50. session.beginTransaction().commit();
  51. }
  52. @Test
  53. publicvoidtestLoadUR(){
  54. Sessionsession=sessionFactory.getCurrentSession();
  55. session.beginTransaction().begin();
  56. Useru=(User)session.get(User.class,3);
  57. System.out.println("用户:"+u.getUsername());
  58. Set<Role>s1=u.getRole();
  59. System.out.print("拥有职务:");
  60. for(Iterator<Role>it=s1.iterator();it.hasNext();){
  61. Roler=(Role)it.next();
  62. System.out.print("\t【"+r.getRoleName()+"】");
  63. }
  64. session.beginTransaction().commit();
  65. }
  66. @BeforeClass
  67. publicstaticvoidbeforeClass(){
  68. sessionFactory=newAnnotationConfiguration().configure().buildSessionFactory();
  69. }
  70. @AfterClass
  71. publicstaticvoidafterClass(){
  72. sessionFactory.close();
  73. }
  74. }

接下来是双向的多对多,实体类代码如下:

Java代码
  1. packagecn.serup.model;
  2. importjava.util.HashSet;
  3. importjava.util.Set;
  4. importjavax.persistence.Entity;
  5. importjavax.persistence.GeneratedValue;
  6. importjavax.persistence.Id;
  7. importjavax.persistence.JoinColumn;
  8. importjavax.persistence.JoinTable;
  9. importjavax.persistence.ManyToMany;
  10. @Entity
  11. publicclassUser{
  12. privateintid;
  13. privateStringusername;
  14. privateSet<Role>role=newHashSet<Role>();
  15. @Id
  16. @GeneratedValue
  17. publicintgetId(){
  18. returnid;
  19. }
  20. publicvoidsetId(intid){
  21. this.id=id;
  22. }
  23. publicStringgetUsername(){
  24. returnusername;
  25. }
  26. publicvoidsetUsername(Stringusername){
  27. this.username=username;
  28. }
  29. @ManyToMany
  30. /**
  31. *多对多映射:注解@ManyToMany(单向)
  32. *默认情况下,hibernate会自动的创建一张中间表,
  33. *来维护多对多关系
  34. *默认中间表的名称:user_role中间表,字段的名称u_idr_id
  35. *如果想更换表名和字段名称,注解如下:
  36. */
  37. @JoinTable(name="t_u_r",
  38. joinColumns={@JoinColumn(name="u_id")},
  39. inverseJoinColumns={@JoinColumn(name="r_id")}
  40. )
  41. /**
  42. *@JoinTable(name="t_u_r",
  43. *指定中间表的表名
  44. *joinColumns={@JoinColumn(name="u_id")},
  45. *指定当前对象的外键
  46. *inverseJoinColumns={@JoinColumn(name="r_id")}
  47. *指定关联对象的外键
  48. */
  49. publicSet<Role>getRole(){
  50. returnrole;
  51. }
  52. publicvoidsetRole(Set<Role>role){
  53. this.role=role;
  54. }
  55. }

Java代码
  1. packagecn.serup.model;
  2. importjava.util.HashSet;
  3. importjava.util.Set;
  4. importjavax.persistence.Entity;
  5. importjavax.persistence.GeneratedValue;
  6. importjavax.persistence.Id;
  7. importjavax.persistence.ManyToMany;
  8. @Entity
  9. publicclassRole{
  10. privateintid;
  11. privateStringroleName;
  12. privateSet<User>user=newHashSet<User>();
  13. @ManyToMany(mappedBy="role")
  14. /**
  15. *多对多,双向关联映射
  16. */
  17. publicSet<User>getUser(){
  18. returnuser;
  19. }
  20. publicvoidsetUser(Set<User>user){
  21. this.user=user;
  22. }
  23. @Id
  24. @GeneratedValue
  25. publicintgetId(){
  26. returnid;
  27. }
  28. publicvoidsetId(intid){
  29. this.id=id;
  30. }
  31. publicStringgetRoleName(){
  32. returnroleName;
  33. }
  34. publicvoidsetRoleName(StringroleName){
  35. this.roleName=roleName;
  36. }
  37. }

测试代码如下:

Java代码
  1. packagecn.serup.hibernate.test;
  2. importjava.util.HashSet;
  3. importjava.util.Iterator;
  4. importjava.util.Set;
  5. importorg.hibernate.Session;
  6. importorg.hibernate.SessionFactory;
  7. importorg.hibernate.cfg.AnnotationConfiguration;
  8. importorg.junit.AfterClass;
  9. importorg.junit.BeforeClass;
  10. importorg.junit.Test;
  11. importcn.serup.model.Role;
  12. importcn.serup.model.User;
  13. publicclassMany2ManyTest{
  14. privatestaticSessionFactorysessionFactory=null;
  15. publicvoidtestSaveUR(){
  16. Roler1=newRole();
  17. r1.setRoleName("项目组长");
  18. Roler3=newRole();
  19. r3.setRoleName("项目经理");
  20. Roler2=newRole();
  21. r2.setRoleName("技术总监");
  22. Useru1=newUser();
  23. u1.setUsername("唐骏");
  24. Useru2=newUser();
  25. u2.setUsername("李开复");
  26. Useru3=newUser();
  27. u3.setUsername("柳传志");
  28. Set<Role>s1=newHashSet<Role>();
  29. s1.add(r1);
  30. s1.add(r3);
  31. Set<Role>s2=newHashSet<Role>();
  32. s2.add(r1);
  33. s2.add(r2);
  34. Set<Role>s3=newHashSet<Role>();
  35. s3.add(r1);
  36. s3.add(r2);
  37. s3.add(r3);
  38. u1.setRole(s1);
  39. u2.setRole(s2);
  40. u3.setRole(s3);
  41. Sessionsession=sessionFactory.getCurrentSession();
  42. session.beginTransaction().begin();
  43. session.save(r1);
  44. session.save(r2);
  45. session.save(r3);
  46. session.save(u1);
  47. session.save(u2);
  48. session.save(u3);
  49. session.beginTransaction().commit();
  50. }
  51. @Test
  52. publicvoidtestLoadUR(){
  53. Sessionsession=sessionFactory.getCurrentSession();
  54. session.beginTransaction().begin();
  55. Useru=(User)session.get(User.class,3);
  56. System.out.println("用户:"+u.getUsername());
  57. Set<Role>s1=u.getRole();
  58. System.out.print("拥有职务:");
  59. for(Iterator<Role>it=s1.iterator();it.hasNext();){
  60. Roler=(Role)it.next();
  61. System.out.print("\t【"+r.getRoleName()+"】");
  62. }
  63. session.beginTransaction().commit();
  64. }
  65. @Test
  66. publicvoidtestLoadRU(){
  67. Sessionsession=sessionFactory.getCurrentSession();
  68. session.beginTransaction().begin();
  69. Roler=(Role)session.get(Role.class,1);
  70. System.out.println("职务:"+r.getRoleName());
  71. Set<User>s1=r.getUser();
  72. System.out.print("谁拥有该职务:");
  73. for(Iterator<User>it=s1.iterator();it.hasNext();){
  74. Useru=(User)it.next();
  75. System.out.print("\t【"+u.getUsername()+"】");
  76. }
  77. session.beginTransaction().commit();
  78. }
  79. @BeforeClass
  80. publicstaticvoidbeforeClass(){
  81. sessionFactory=newAnnotationConfiguration().configure().buildSessionFactory();
  82. }
  83. @AfterClass
  84. publicstaticvoidafterClass(){
  85. sessionFactory.close();
  86. }
  87. }

以上,就是双向的多对多的配置和测试。还有的,就是一些别的属性的配置,如级联啊,fetch策略之类的。

级联(cascade)属性
1、CascadeType.ALL(包括增、删、改、查,联动操作),其实查不算在内,查Fetch
2、CascadeType.MERGE(合并的join)--不重要
3、CascadeType.PERSIST(保存的时候在级联)
4、CascadeType.REFRESH(刷新说明:比如现在我查询出了数据,另外一个人在我查询数据之后,他对数据做了修改,这是才会级联上,hibernate会自动刷新我查询出来的数据)
5、CascadeType.REMOVE (只要在删除操作时才会级联)
6、我们一般都只设置CascadeType.ALL就OK了,
7、Cascade不是必须的,他的作用只是可以让我们快速的开发,我们也可以通过手动增、删、改、查

Fetch捉取策略
1、FetchType.EAGER(渴望的,希望马上得到)
a) 一对多关系,比如通过get()方法来get出一的一端,他只会出一条SQL语句,不会自动去查询多的一端,如果设置FetchType.EAGER,会讲他的关联对象查询出来
b) 如果是load的话,他不会发出SQL语句,因为load支持延迟加载,只有真正获取数据时才会发SQL
2、FetchType.LAZY(懒加载)
a) 只有真正获取数据时才发出SQL语句
3、默认是:FetchType.LAZY(一对多)
4、默认是:FetchType.EAGER(多对一)
5、一般使用默认就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring整合Hibernate是一种常见的Java开发组合,通过将Spring和Hibernate框架结合起来,可以实现更加灵活、高效的应用程序开发。下面是一个简单的Spring整合Hibernate的示例。 首先,我们需要创建一个Spring的配置文件applicationContext.xml,配置Hibernate的会话工厂、数据源以及其他相关的Bean。在该配置文件中,我们可以指定数据源、事务管理器,并定义Hibernate的会话工厂,以及设置SessionFactory所需要的Hibernate属性。 接下来,我们需要创建一个Hibernate的配置文件hibernate.cfg.xml,用于设置数据库连接、持久化实体类的映射关系等。在该配置文件中,我们可以指定数据库连接的URL、用户名和密码,还可以定义实体类与数据库表之间的映射关系。 然后,我们需要创建实体类,这些实体类将与数据库表对应。我们需要使用注解或XML来映射实体类与数据库表之间的字段关系。 接下来,在DAO层中定义接口和实现类。接口用于声明数据库操作的方法,而实现类则负责具体的数据库操作,包括增删改查等。在实现类中,我们可以使用Hibernate的API和查询语言来访问数据库,实现对数据库的操作。 最后,在Service层中定义业务逻辑的方法。Service层负责处理业务逻辑,并调用DAO层的方法访问数据库。在Service层中,我们可以通过@Transactional注解来定义事务的边界,保证数据库操作的一致性和完整性。 通过以上步骤,我们就完成了Spring整合Hibernate的基本配置和代码编写。在运行项目时,Spring会自动加载配置文件并创建相关的对象,同时会自动管理事务和会话等。 通过Spring整合Hibernate,我们可以充分发挥Spring和Hibernate各自的优势,实现数据库访问的灵活性、可扩展性和高性能。它们共同为Java开发提供了一个强大的框架,使得开发者能够更加便捷地开发出功能完善、高效稳定的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值