`

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、一般使用默认就可以了

分享到:
评论

相关推荐

    springmvc spring hibernate整合Demo

    4. 创建实体类:定义与数据库表对应的Java类,使用Hibernate的注解(如@Entity、@Table、@Id等)进行ORM映射。 5. 定义DAO:创建数据访问对象(DAO)接口,包含CRUD操作。这些接口通常由Spring管理,通过代理模式...

    springmvc+hibernate注解框架整合 demo

    这个"springmvc+hibernate注解框架整合 demo"是一个示例项目,展示了如何通过注解方式将这两个框架无缝集成。 **Spring MVC 框架** Spring MVC 是 Spring 框架的一部分,它提供了处理HTTP请求、转发响应以及管理...

    HibernateDemo

    【标题】"HibernateDemo"是一个基于Java的开源对象关系映射框架示例,它用于简化数据库操作。这个压缩包提供了一个简单的入门项目,帮助初学者理解如何使用Hibernate框架。通过这个例子,我们可以深入学习Hibernate...

    springMvc+hibernate Demo

    这个 "springMvc+hibernate Demo" 压缩包文件很可能是为了展示如何将这两个框架整合在一起,创建一个完整的数据驱动的 Web 应用。 **Spring MVC 框架** Spring MVC 是 Spring 框架的一部分,设计用于构建可维护、松...

    spring3.2 hibernate4 demo CRUD 完整例子

    在本示例中,我们探讨的是一个基于...总之,这个“spring3.2 hibernate4 demo CRUD”实例提供了一个完整的、实战性的学习平台,帮助开发者快速上手Spring和Hibernate的整合,理解如何在Java Web开发中有效地管理数据。

    hibernate+maven demo项目工程

    【hibernate+maven demo项目工程】是一个基于Hibernate ORM框架和Maven构建工具的示例项目,旨在帮助开发者理解和实践如何在实际开发中整合这两项技术。该项目的主要目的是展示如何利用Maven管理依赖,以及如何配置...

    Springmvc+hibernate整合Demo

    在这个“Springmvc+hibernate整合Demo”中,我们将会探讨如何将这两个框架结合在一起,以创建一个功能丰富的客户关系管理(CRM)系统。 **Spring MVC 框架** Spring MVC 是 Spring 框架的一部分,提供了一个用于...

    hibernate validator demo

    - **约束注解**: Hibernate Validator 提供了一系列的预定义注解,如 `@NotNull`、`@Size`、`@Pattern` 等,用于在字段上声明验证规则。 - **验证器**: 验证器是执行验证逻辑的组件,它会根据注解上的规则检查对象的...

    spring+hibernate整合demo

    标题"spring+hibernate整合demo"表明这是一个示例项目,展示了如何将Spring和Hibernate这两个框架结合使用。整合Spring和Hibernate可以使应用程序更易于管理,因为Spring可以控制Hibernate的生命周期,并提供事务...

    spring+hibernate框架demo

    这个"spring+hibernate框架demo"提供了一个整合这两个框架的小项目,便于初学者理解和学习。 Spring 框架: 1. **依赖注入**:Spring 的核心特性之一,它允许通过配置文件或注解来管理对象及其依赖关系,降低了组件...

    Hibernate简单的demo

    1. **实体(Entity)**: 在Hibernate中,实体通常对应数据库中的表,它们是Java类,通过注解或XML配置与数据库表进行映射。 2. **对象关系映射(ORM)**: Hibernate 提供了ORM工具,将Java对象与数据库表之间的映射...

    springMVC+hibernate搭建的一个demo帮助新人

    这个“springMVC+hibernate搭建的一个demo”旨在为初学者提供一个快速入门的实例,帮助他们理解和配置这些技术的集成环境。 SpringMVC是Spring框架的一部分,它提供了处理HTTP请求、管理控制器、数据绑定、视图解析...

    hibernate基础demo

    总结起来,"hibernate基础demo"是一个关于如何使用Hibernate框架的教程,特别是通过注解的方式来简化数据库操作。它涵盖了Hibernate的基本配置、实体类的注解映射、会话工厂和会话的使用、以及查询和事务管理等核心...

    Hibernate注解、注释大全

    《Hibernate注解详解》 Hibernate 是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作。在Hibernate中,注解是用于描述Java类及其属性如何映射到数据库表的重要工具。本文将全面解析Hibernate中的...

    hibernate框架demo

    在“hibernate框架demo”项目中,开发者可能已经创建了一个简单的Java应用,演示了如何使用Hibernate进行数据操作。通过查看源代码,你可以学习到如何配置SessionFactory,如何创建和管理Session,以及如何执行基本...

    hibernateDemo.rar

    在本项目中,"hibernateDemo.rar" 是一个压缩包,包含了一个使用Spring Boot、JPA、Hibernate和Redis构建的示例应用。这个项目旨在展示如何整合这些技术来实现高效的数据存储和缓存管理。以下是对每个组件的详细解释...

    sping hibernate Annotation(注释配置) demo(例子)

    本文将深入探讨如何结合 Spring 的注解配置与 Hibernate 实现数据持久化,通过一个实际的 demo 示例来阐述整个过程。 首先,Spring 框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...

    hibernateSearch+demo

    这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate Search 的核心概念和功能。 在 Hibernate Search 中,主要涉及以下关键知识点: 1. **全文索引**:Hibernate Search 使用 ...

    hibernate的demo

    【hibernate的demo】 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本demo旨在提供一个基本的Hibernate使用示例,帮助理解其核心概念和功能。 一、Hibernate概述 ...

Global site tag (gtag.js) - Google Analytics