hibernate mysql annotation_Hibernate Annotation (Hibernate 注解)

说明文档:

下载: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:计算机科学与技术,好啊,真是红啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值