Hibernate Annotation   (Hibernate 注解)

 

进入: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

 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3307/users
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
mysqlusers
</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<property name="current_session_context_class">thread</property>
<mapping class="com.b510.examples.Product" />
<mapping class="com.b510.examples.Category" /> </session-factory> </hibernate-configuration>

利用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 class Category implements java.io.Serializable { private static final long serialVersionUID = 3240281547213597385L;
private Integer id;
private String name;
private String description;
private Set<Product> products = new HashSet<Product>(0); public Category() {
} public Category(String name, String description, Set<Product> products) {
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)
public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} //映射表中name这个字段 ,长度是500
@Column(name = "name", length = 500)
public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
} //映射表中description这个字段 ,长度是500
@Column(name = "description", length = 500)
public String getDescription() {
return this.description;
} public void setDescription(String description) {
this.description = description;
} //级联操作:cascade = CascadeType.ALL
//延迟加载:fetch = FetchType.LAZY
//映射:mappedBy = "category"
//一对多方式
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")
public Set<Product> getProducts() {
return this.products;
} public void setProducts(Set<Product> products) {
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 class Product implements java.io.Serializable { private static final long serialVersionUID = -1546206493725028472L;
private Integer id;
private Category category;
private String name;
private String price;
private String descripton; public Product() {
} public Product(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)
public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} //延迟加载:多对一方式
//关联信息:外键name = "category_id"
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id")
public Category getCategory() {
return this.category;
} public void setCategory(Category category) {
this.category = category;
} @Column(name = "name", length = 500)
public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
} @Column(name = "price", length = 10)
public String getPrice() {
return this.price;
} public void setPrice(String price) {
this.price = price;
} @Column(name = "descripton", length = 500)
public String getDescripton() {
return this.descripton;
} public void setDescripton(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 class HibernateTest { public static void main(String[] args) {
HibernateTest test=new HibernateTest();
test.add();
test.find();
}
public void add(){
Configuration config=new AnnotationConfiguration();
config.configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Session session=sessionFactory.getCurrentSession();
session.beginTransaction();
Category c=(Category)session.get(Category.class, 5); Product p=new Product();
p.setName("计算机科学与技术");
p.setPrice("123");
p.setDescripton("计算机科学与技术,好啊,真是红啊"); p.setCategory(c);
c.getProducts().add(p); session.save(p);
session.getTransaction().commit();
} public void find(){
Configuration config=new AnnotationConfiguration();
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<Product> 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 for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
select
category0_.id as id1_0_,
category0_.description as descript2_1_0_,
category0_.name as name1_0_
from
users.category category0_
where
category0_.id=?
Hibernate:
select
products0_.category_id as category5_1_,
products0_.id as id1_,
products0_.id as id0_0_,
products0_.category_id as category5_0_0_,
products0_.descripton as descripton0_0_,
products0_.name as name0_0_,
products0_.price as price0_0_
from
users.product products0_
where
products0_.category_id=?
Hibernate:
select
max(id)
from
product
Hibernate:
insert
into
users.product
(category_id, descripton, name, price, id)
values
(?, ?, ?, ?, ?)
Hibernate:
select
category0_.id as id5_0_,
category0_.description as descript2_5_0_,
category0_.name as name5_0_
from
users.category category0_
where
category0_.id=?
id: 5 name:xml33
Hibernate:
select
products0_.category_id as category5_1_,
products0_.id as id1_,
products0_.id as id4_0_,
products0_.category_id as category5_4_0_,
products0_.descripton as descripton4_0_,
products0_.name as name4_0_,
products0_.price as price4_0_
from
users.product products0_
where
products0_.category_id=?
id:9 name:计算机科学与技术 description:计算机科学与技术,好啊,真是红啊

hibernate注解配置举例说明的更多相关文章

  1. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  2. Hibernate注解配置

    在之前的第一次对框架的实际应用中,我使用的是Hibernate的xml配置方法,xml配置方法非常繁琐, 还是推荐所有使用Hibernate的人使用注解方式进行配置,在这篇文章中,我将列举出我们常用的 ...

  3. Hibernate注解配置与XML配置区别

    注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-p ...

  4. hibernate 注解配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/X

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  6. 用户、角色、权限三者多对多用hibernate的一对多注解配置

    用户.角色.权限三者多对多用hibernate的一对多注解配置 //权限表@Table(name = "p")public class P { @Id @GeneratedValu ...

  7. Mingyang.net:注解配置Hibernate时报错Unknown Entity

    注解配置时报错:org.hibernate.MappingException: Unknown entity: net.mingyang.cms.bean.User org.hibernate.Map ...

  8. Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式

    ①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...

  9. spring与hibernate整合配置基于Annotation注解方式管理实务

    1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 <!-- jdbc连接信息 --> <context:property-pla ...

随机推荐

  1. bzoj3887: [Usaco2015 Jan]Grass Cownoisseur

    题意: 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) =>有向图我们 ...

  2. hbase查询基于标准sql规范中间件Phoenix

    Phoenix是个很好的hbase 查询工具,在hbase中安装也很简单,可以按照 http://www.cnblogs.com/laov/p/4137136.html 这个连接中进行配置客户端和服务 ...

  3. wu2198:难得的波段抄底机会

    很好的波段抄底机会 个人浅见看,目前染料股跌出的机会明显,养殖股波段机会明显,芯片.半导体.集成电路.北导.软件.国产操作系统等科技股短线机会不错.另外,大盘指数2856/2806区域的波段操作机会不 ...

  4. FETCH - 用游标从查询中抓取行

    SYNOPSIS FETCH [ direction { FROM | IN } ] cursorname where direction can be empty or one of: NEXT P ...

  5. 《坐热板凳》第九次团队作业:Beta冲刺与验收准备(第一天)

    <坐热板凳>第九次团队作业:Beta冲刺与验收准备 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https ...

  6. vue-transition动画

    vue-transition动画 官网API: https://cn.vuejs.org/v2/guide/transitions.html demo点击显示与消失 <div id=" ...

  7. sigqueue与kill详解及实例

    /*********************************************************************************************** 相关函 ...

  8. JavaScript 循环

    for循环:  如果您希望一遍又一遍运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. 我们可以这样输出数组的值: document.write(cars[0] + "<br ...

  9. mysql双机热备实现

    说明 机器A:(172.16.1.251),机器B:(172.16.1.252) 两台机器都创建数据库web:create database hello default charset utf8; 实 ...

  10. 新手用WPF山寨QQ管家7.6(三)

    由于一直忙工作,没有更新完博客,更可恨的是...在清理资料的时候不小心删除了之前自己做的各种效果的DEMO....好在项目中用到了大部分,也算有所保留,以后可不敢随便删东西了....太可怕了! 在 新 ...