Hibernate Annotation (Hibernate 注解)

来源:互联网 发布:百利甜酒 知乎 编辑:程序博客网 时间:2024/05/01 23:14

http://www.cnblogs.com/hongten/archive/2011/07/20/2111773.html


进入:http://www.hibernate.org

说明文档:

英文:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

中文:http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html_single/

下载:hibernate annotation 3.4.0 GA

得到:hibernate-annotations.jar

   hibernate-commons-annotation.jar

   ejb3-persistence.jar

数据库:mysql

category表:id,name,description <Pk>id

product表:id,name ,price, description ,category_id <pk>id <fk>category_id

新建java project项目:

Add Hibernate Capabilities

hibernate.cfg.xml

复制代码
 1 <?xml version='1.0' encoding='UTF-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5  6 <!-- Generated by MyEclipse Hibernate Tools.                   --> 7 <hibernate-configuration> 8  9  <session-factory>10   <property name="dialect">11    org.hibernate.dialect.MySQLDialect12   </property>13   <property name="connection.url">14    jdbc:mysql://localhost:3307/users15   </property>16   <property name="connection.username">root</property>17   <property name="connection.password">root</property>18   <property name="connection.driver_class">19    com.mysql.jdbc.Driver20   </property>21   <property name="myeclipse.connection.profile">22    mysqlusers23   </property>24   <property name="format_sql">true</property>25   <property name="show_sql">true</property>26   <property name="current_session_context_class">thread</property>27   <mapping class="com.b510.examples.Product" />28   <mapping class="com.b510.examples.Category" />29 30  </session-factory>31 32 </hibernate-configuration>
复制代码

利用Hibernate的逆向工程生成:

Category.java and Product.java

Category.java

复制代码
 1 package com.b510.examples; 2  3 import java.util.HashSet; 4 import java.util.Set; 5  6 // 标准注解 7  8 import javax.persistence.CascadeType; 9 import javax.persistence.Column;10 import javax.persistence.Entity;11 import javax.persistence.FetchType;12 import javax.persistence.GeneratedValue;13 import javax.persistence.Id;14 import javax.persistence.OneToMany;15 import javax.persistence.Table;16 17 //增加的注解18 19 import org.hibernate.annotations.GenericGenerator;20 21 //当前的类是一个持久化类,是Category这个类。他映射了一个表category。所对应的 数据库是users22 //这句:@Table(name = "category", catalog = "users")  可以省略23 @Entity24 @Table(name = "category", catalog = "users")25 26 public class Category implements java.io.Serializable {27 28  private static final long serialVersionUID = 3240281547213597385L;29  private Integer id;30  private String name;31  private String description;32  private Set<Product> products = new HashSet<Product>(0);33 34  35  public Category() {36  }37 38  public Category(String name, String description, Set<Product> products) {39   this.name = name;40   this.description = description;41   this.products = products;42  }43 44  // 主键 :@Id    主键生成方式:strategy = "increment"45  //映射表中id这个字段,不能为空,并且是唯一的46  @GenericGenerator(name = "generator", strategy = "increment")47  @Id48  @GeneratedValue(generator = "generator")49  @Column(name = "id", unique = true, nullable = false)50  public Integer getId() {51   return this.id;52  }53 54  public void setId(Integer id) {55   this.id = id;56  }57 58  //映射表中name这个字段 ,长度是50059  @Column(name = "name", length = 500)60  public String getName() {61   return this.name;62  }63 64  public void setName(String name) {65   this.name = name;66  }67  68  //映射表中description这个字段 ,长度是50069  @Column(name = "description", length = 500)70  public String getDescription() {71   return this.description;72  }73 74  public void setDescription(String description) {75   this.description = description;76  }77 78  //级联操作:cascade = CascadeType.ALL79  //延迟加载:fetch = FetchType.LAZY80  //映射:mappedBy = "category"81  //一对多方式82  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")83  public Set<Product> getProducts() {84   return this.products;85  }86 87  public void setProducts(Set<Product> products) {88   this.products = products;89  }90 91 }
复制代码

Product.java

复制代码
 1 package com.b510.examples; 2  3 import javax.persistence.Column; 4 import javax.persistence.Entity; 5 import javax.persistence.FetchType; 6 import javax.persistence.GeneratedValue; 7 import javax.persistence.Id; 8 import javax.persistence.JoinColumn; 9 import javax.persistence.ManyToOne;10 import javax.persistence.Table;11 import org.hibernate.annotations.GenericGenerator;12 13 14 @Entity15 @Table(name = "product", catalog = "users")16 public class Product implements java.io.Serializable {17 18  private static final long serialVersionUID = -1546206493725028472L;19  private Integer id;20  private Category category;21  private String name;22  private String price;23  private String descripton;24 25  26  public Product() {27  }28 29  public Product(Category category, String name, String price,30    String descripton) {31   this.category = category;32   this.name = name;33   this.price = price;34   this.descripton = descripton;35  }36  37  @GenericGenerator(name = "generator", strategy = "increment")38  @Id39  @GeneratedValue(generator = "generator")40  @Column(name = "id", unique = true, nullable = false)41  public Integer getId() {42   return this.id;43  }44 45  public void setId(Integer id) {46   this.id = id;47  }48 49  //延迟加载:多对一方式50  //关联信息:外键name = "category_id"51  @ManyToOne(fetch = FetchType.LAZY)52  @JoinColumn(name = "category_id")53  public Category getCategory() {54   return this.category;55  }56 57  public void setCategory(Category category) {58   this.category = category;59  }60 61  @Column(name = "name", length = 500)62  public String getName() {63   return this.name;64  }65 66  public void setName(String name) {67   this.name = name;68  }69 70  @Column(name = "price", length = 10)71  public String getPrice() {72   return this.price;73  }74 75  public void setPrice(String price) {76   this.price = price;77  }78 79  @Column(name = "descripton", length = 500)80  public String getDescripton() {81   return this.descripton;82  }83 84  public void setDescripton(String descripton) {85   this.descripton = descripton;86  }87 88 }
复制代码

测试代码:

HibernateTest.java

复制代码
 1 /** 2  *  3  */ 4 package com.b510.examples; 5  6 import java.util.Set; 7  8 import org.hibernate.Session; 9 import org.hibernate.SessionFactory;10 import org.hibernate.cfg.AnnotationConfiguration;11 import org.hibernate.cfg.Configuration;12 13 /**14  *15  * @author XHW16  *17  * @date 2011-7-2018  *19  */20 public class HibernateTest {21 22  public static void main(String[] args) {23   HibernateTest test=new HibernateTest();24   test.add();25   test.find();26  }27  public void add(){28  Configuration config=new AnnotationConfiguration();29  config.configure();30  SessionFactory sessionFactory=config.buildSessionFactory();31  Session session=sessionFactory.getCurrentSession();32  session.beginTransaction();33  Category c=(Category)session.get(Category.class, 5);34  35  Product p=new Product();36  p.setName("计算机科学与技术");37  p.setPrice("123");38  p.setDescripton("计算机科学与技术,好啊,真是红啊");39  40  p.setCategory(c);41  c.getProducts().add(p);42  43  session.save(p);44  session.getTransaction().commit();45  }46  47  48  public void find(){49   Configuration config=new AnnotationConfiguration();50   config.configure();51   SessionFactory sessionFactory=config.buildSessionFactory();52   Session session=sessionFactory.getCurrentSession();53   session.beginTransaction();54   Category c=(Category)session.get(Category.class, 5);55    System.out.println("id: "+c.getId()+"  name:"+c.getName());56    Set<Product> p=c.getProducts();57    for(Product product:p){58     System.out.println("id:"+product.getId()+"  name:"+product.getName()+"  description:"+product.getDescripton());59    }60    session.getTransaction().commit();61  }62 }
复制代码

运行效果:

复制代码
 1 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). 2 log4j:WARN Please initialize the log4j system properly. 3 Hibernate:  4     select 5         category0_.id as id1_0_, 6         category0_.description as descript2_1_0_, 7         category0_.name as name1_0_  8     from 9         users.category category0_ 10     where11         category0_.id=?12 Hibernate: 13     select14         products0_.category_id as category5_1_,15         products0_.id as id1_,16         products0_.id as id0_0_,17         products0_.category_id as category5_0_0_,18         products0_.descripton as descripton0_0_,19         products0_.name as name0_0_,20         products0_.price as price0_0_ 21     from22         users.product products0_ 23     where24         products0_.category_id=?25 Hibernate: 26     select27         max(id) 28     from29         product30 Hibernate: 31     insert 32     into33         users.product34         (category_id, descripton, name, price, id) 35     values36         (?, ?, ?, ?, ?)37 Hibernate: 38     select39         category0_.id as id5_0_,40         category0_.description as descript2_5_0_,41         category0_.name as name5_0_ 42     from43         users.category category0_ 44     where45         category0_.id=?46 id: 5  name:xml3347 Hibernate: 48     select49         products0_.category_id as category5_1_,50         products0_.id as id1_,51         products0_.id as id4_0_,52         products0_.category_id as category5_4_0_,53         products0_.descripton as descripton4_0_,54         products0_.name as name4_0_,55         products0_.price as price4_0_ 56     from57         users.product products0_ 58     where59         products0_.category_id=?60 id:9  name:计算机科学与技术  description:计算机科学与技术,好啊,真是红啊
复制代码

原创粉丝点击