hibernate注解配置举例说明
Hibernate Annotation (Hibernate 注解)
说明文档:
英文: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注解配置举例说明的更多相关文章
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- Hibernate注解配置
在之前的第一次对框架的实际应用中,我使用的是Hibernate的xml配置方法,xml配置方法非常繁琐, 还是推荐所有使用Hibernate的人使用注解方式进行配置,在这篇文章中,我将列举出我们常用的 ...
- Hibernate注解配置与XML配置区别
注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-p ...
- 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 ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- 用户、角色、权限三者多对多用hibernate的一对多注解配置
用户.角色.权限三者多对多用hibernate的一对多注解配置 //权限表@Table(name = "p")public class P { @Id @GeneratedValu ...
- Mingyang.net:注解配置Hibernate时报错Unknown Entity
注解配置时报错:org.hibernate.MappingException: Unknown entity: net.mingyang.cms.bean.User org.hibernate.Map ...
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...
- spring与hibernate整合配置基于Annotation注解方式管理实务
1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 <!-- jdbc连接信息 --> <context:property-pla ...
随机推荐
- webpack最简单的入门教程里bundle.js之运行单步调试的原理解析
读这篇文章的朋友,请确保对webpack有最基础的认识. 您可以阅读我前一篇文章:Webpack 10分钟入门 来在本地运行一个Webpack的hello world项目.https://www.to ...
- JavaScript:理解Promise方法
什么是promise? Promise的核心思想是代表异步操作的一个结果,并且promise具有三个状态(pending初始状态,fulfilled成功状态,rejected失败状态).我们可以理解为 ...
- preprocessing MinMaxScaler
import numpy as npfrom sklearn.preprocessing import MinMaxScalerdataset = np.array([1,2,3,5]).astype ...
- Python中的集合set
>>> help(set) Help on class set in module __builtin__: class set(object) | set(iterable) -- ...
- JMeter接口压力测试课程入门到高级实战
章节一压力测试课程介绍 1.2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分 ...
- Oracle ORA-01722 无效数字
ORA-01722 无效数字 以下几种情况,数据库会报“ORA-01722 无效数字”错误: ① 对于两个类型不一致,一个“数字类型”,一个“非数字类型”进行赋值,或者比较操作: ② to_numbe ...
- Hotkeys.js 2.0.2 发布,JS 网页快捷键设置,捕获键盘输入和输入的组合键快捷键,它没有依赖
这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...
- Linux基础-Linux常用命令
Linux(/'lainʌks/)系统特点:稳定,安全,开源(一切皆文件) 装上SSH协议就可以连接Linux 装虚拟机(SSH) win用xshell工具 Linux命令:每日一个linux命令 p ...
- Nodejs NPM CNPM优雅安装install
由于npm和cnpm都能安装组件,安装的组件有的保存在c盘用户目录的Appdata隐藏目录下,有的保存在安装node的目录下,而且安装在c盘的话,重装系统又得重新部署,甚是麻烦,所以这里提供优雅安装的 ...
- PHP面向对象编程(1)基础
一.面向对象OOP(Oriented Object Programming) 面向过程的编程 将要实现的功能描述为一个从一开始到结束的连续的“步骤(过程)”. 一次逐步完成这些步骤.如果步骤比较大,又 ...