说明文档:
下载:hibernate annotation 3.4.0 GA
得到:hibernate-annotations.jar
hibernate-commons-annotation.jar
ejb3-persistence.jar
数据库:mysql
category表:id,name,description id
product表:id,name ,price, description ,category_id id category_id
新建java project项目:
Add Hibernate Capabilities
hibernate.cfg.xml
/p>
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
org.hibernate.dialect.MySQLDialect
jdbc:mysql://localhost:3307/users
root
root
com.mysql.jdbc.Driver
mysqlusers
true
true
thread
利用Hibernate的逆向工程生成:
Category.java and Product.java
Category.java
package com.b510.examples;
import java.util.HashSet;
import java.util.Set;//标准注解
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;//增加的注解
import org.hibernate.annotations.GenericGenerator;//当前的类是一个持久化类,是Category这个类。他映射了一个表category。所对应的 数据库是users//这句:@Table(name = "category", catalog = "users") 可以省略
@Entity
@Table(name= "category", catalog = "users")public classCategory implements java.io.Serializable {private static final long serialVersionUID = 3240281547213597385L;privateInteger id;privateString name;privateString description;private Set products = new HashSet(0);publicCategory() {
}public Category(String name, String description, Setproducts) {this.name =name;this.description =description;this.products =products;
}//主键 :@Id 主键生成方式:strategy = "increment"//映射表中id这个字段,不能为空,并且是唯一的
@GenericGenerator(name = "generator", strategy = "increment")
@Id
@GeneratedValue(generator= "generator")
@Column(name= "id", unique = true, nullable = false)publicInteger getId() {return this.id;
}public voidsetId(Integer id) {this.id =id;
}//映射表中name这个字段 ,长度是500
@Column(name = "name", length = 500)publicString getName() {return this.name;
}public voidsetName(String name) {this.name =name;
}//映射表中description这个字段 ,长度是500
@Column(name = "description", length = 500)publicString getDescription() {return this.description;
}public voidsetDescription(String description) {this.description =description;
}//级联操作:cascade = CascadeType.ALL//延迟加载:fetch = FetchType.LAZY//映射:mappedBy = "category"//一对多方式
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")public SetgetProducts() {return this.products;
}public void setProducts(Setproducts) {this.products =products;
}
}
Product.java
package com.b510.examples;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name= "product", catalog = "users")public classProduct implements java.io.Serializable {private static final long serialVersionUID = -1546206493725028472L;privateInteger id;privateCategory category;privateString name;privateString price;privateString descripton;publicProduct() {
}publicProduct(Category category, String name, String price,
String descripton) {this.category =category;this.name =name;this.price =price;this.descripton =descripton;
}
@GenericGenerator(name= "generator", strategy = "increment")
@Id
@GeneratedValue(generator= "generator")
@Column(name= "id", unique = true, nullable = false)publicInteger getId() {return this.id;
}public voidsetId(Integer id) {this.id =id;
}//延迟加载:多对一方式//关联信息:外键name = "category_id"
@ManyToOne(fetch =FetchType.LAZY)
@JoinColumn(name= "category_id")publicCategory getCategory() {return this.category;
}public voidsetCategory(Category category) {this.category =category;
}
@Column(name= "name", length = 500)publicString getName() {return this.name;
}public voidsetName(String name) {this.name =name;
}
@Column(name= "price", length = 10)publicString getPrice() {return this.price;
}public voidsetPrice(String price) {this.price =price;
}
@Column(name= "descripton", length = 500)publicString getDescripton() {return this.descripton;
}public voidsetDescripton(String descripton) {this.descripton =descripton;
}
}
测试代码:
HibernateTest.java
/**
**/package com.b510.examples;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;/**
*
* @author XHW
*
* @date 2011-7-20
**/
public classHibernateTest {public static voidmain(String[] args) {
HibernateTest test=newHibernateTest();
test.add();
test.find();
}public voidadd(){
Configuration config=newAnnotationConfiguration();
config.configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Session session=sessionFactory.getCurrentSession();
session.beginTransaction();
Category c=(Category)session.get(Category.class, 5);
Product p=newProduct();
p.setName("计算机科学与技术");
p.setPrice("123");
p.setDescripton("计算机科学与技术,好啊,真是红啊");
p.setCategory(c);
c.getProducts().add(p);
session.save(p);
session.getTransaction().commit();
}public voidfind(){
Configuration config=newAnnotationConfiguration();
config.configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Session session=sessionFactory.getCurrentSession();
session.beginTransaction();
Category c=(Category)session.get(Category.class, 5);
System.out.println("id:"+c.getId()+"name:"+c.getName());
Set p=c.getProducts();for(Product product:p){
System.out.println("id:"+product.getId()+"name:"+product.getName()+"description:"+product.getDescripton());
}
session.getTransaction().commit();
}
}
运行效果:
log4j:WARN No appenders could be found forlogger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate:selectcategory0_.idasid1_0_,
category0_.descriptionasdescript2_1_0_,
category0_.nameasname1_0_fromusers.category category0_wherecategory0_.id=?Hibernate:selectproducts0_.category_idascategory5_1_,
products0_.idasid1_,
products0_.idasid0_0_,
products0_.category_idascategory5_0_0_,
products0_.descriptonasdescripton0_0_,
products0_.nameasname0_0_,
products0_.priceasprice0_0_fromusers.product products0_whereproducts0_.category_id=?Hibernate:selectmax(id)fromproduct
Hibernate:
insert
into
users.product
(category_id, descripton, name, price, id)
values
(?, ?, ?, ?, ?)
Hibernate:selectcategory0_.idasid5_0_,
category0_.descriptionasdescript2_5_0_,
category0_.nameasname5_0_fromusers.category category0_wherecategory0_.id=?id:5name:xml33
Hibernate:selectproducts0_.category_idascategory5_1_,
products0_.idasid1_,
products0_.idasid4_0_,
products0_.category_idascategory5_4_0_,
products0_.descriptonasdescripton4_0_,
products0_.nameasname4_0_,
products0_.priceasprice4_0_fromusers.product products0_whereproducts0_.category_id=?id:9 name:计算机科学与技术 description:计算机科学与技术,好啊,真是红啊