记录一下annotation代替*.hbm.xml的第一个程序
使用annotation需先导入java ee中的javax.persistence包。我当时只装了java se JDK 所以就抛ClassNotFound异常。
有两个实体product -- category
@Entity()
@Table(name="product",catalog="test")
public class Product implements Serializable {
private Integer id;
private Category category;
private String name;
private String price;
private String description;
public Product() {
// TODO Auto-generated constructor stub
}
public Product(Category category, String name, String price,
String description) {
super();
this.category = category;
this.name = name;
this.price = price;
this.description = description;
}
@GenericGenerator(name="generator",strategy="increment")//按自增策略生产标示符
@Id
@GeneratedValue(generator="generator")
@Column(name="id",nullable=true,length=10)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="c_id")
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="price",length=10)
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Column(name="description")
public String getDescription() {
return description;
}
public void setDescription(String descripton) {
this.description = descripton;
}
}
@Entity
@Table(name="category",catalog="test")
public class Category implements Serializable {
private Integer id;
private String name;
private String description;
private Set<Product> products = new HashSet<Product>();
public Category() {
// TODO Auto-generated constructor stub
}
public Category(String name, String description, Set<Product> products) {
super();
this.name = name;
this.description = description;
this.products = products;
}
@GenericGenerator(name="generator",strategy="increment")
@Id
@GeneratedValue(generator="generator")
@Column(name="id",unique=true,nullable=false)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="name", length=20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="description", length=500)
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
//此处只需要注释OneToMany,不需要注释JoinColumn.
//注释@JoinColumn在多的一端
@OneToMany(cascade=CascadeType.ALL,mappedBy="category")
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
hibernate.cfg.xml依然没有变,只是把<mapping resource=""/>换成了<mapping class="">
<hibernate-configuration>
<session-factory>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<property name="hibernate.id.new_generator_mappings">true</property>
<property name="current_session_context_class">thread</property>
<mapping class="entity.Product" />
<mapping class="entity.Category" />
</session-factory>
</hibernate-configuration>
最后在插入一个工具类吧
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static{
try{
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable e){
throw new ExceptionInInitializerError(e);
}
}
public static Session getSession() throws HibernateException{
return sessionFactory.openSession();
}
}
分享到:
相关推荐
在Java的持久化框架Hibernate中,`@OneToOne`注解用于表示一对一的关联关系,而唯一外键一对一双向关联则是这种关系的一种具体实现方式。这篇文章将深入探讨这一概念,帮助你理解如何在实际开发中应用。 首先,我们...
本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...
在实际的项目开发中,我们经常遇到各种各样的关联关系,比如一对一、一对多、多对一、多对多等。本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared ...
这些注解分别表示一对多、多对一、一对一和多对多的关系。例如,表示用户与角色的一对多关系: ```java @ManyToOne @JoinColumn(name="ROLE_ID") private Role role; ``` 四、继承策略注解 1. `@Inheritance`...
- `@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`: 用于处理各种关联关系,如一对一、一对多、多对一、多对多。 3. **继承与多态** - `@Inheritance`: 定义继承策略,如SINGLE_TABLE(单表)、JOINED...
3. 多对一(ManyToOne):使用`@ManyToOne`注解表示多个实体对应一个其他实体。 4. 多对多(ManyToMany):使用`@ManyToMany`注解表示多个实体可以对应多个其他实体。 例如,一个用户可以有多个角色: ```java @...
本篇文章将深入探讨如何使用Hibernate Annotation来实现基于外键的单向多对一关联。 在关系型数据库中,多对一关联是一种常见的关系类型,意味着一个实体(如表)可以与另一个实体有多条记录关联,而另一个实体只能...
在这个例子中,`User`类代表了`users`表,`id`是主键,`username`是表的一个列,`role`是与`Role`类的一对多关联。 **4. 注解的优势** - **简洁性**:注解使得ORM配置与实体类代码紧密集成,减少了XML配置文件的...
例如,`@ManyToOne`表示一对多的关系,`@OneToMany`则表示多对一的关系,它们可以方便地处理复杂的数据库关系。 3. **ejb3-persistence.jar**: 这个jar包是Java EE企业版中的一部分,包含了JSR 303(Java ...
在本主题中,我们将深入探讨使用Hibernate注解来实现JPA的一对多、多对多和多对一的关系映射。 1. **一对多关系**: 在现实世界中,一个老师可以教多个学生,或者一个班级可以包含多个学生,这就是典型的一对多...
而Hibernate Annotation是Hibernate的一个重要特性,它通过在Java类和字段上添加注解来简化数据库表和实体类之间的映射配置。这篇博文将带你了解如何使用Hibernate Annotation进行开发。 首先,我们需要理解Java...
《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。...在后续的学习笔记中,我们将继续探索更多关于Hibernate Annotation的实用技巧和高级特性。
- `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 定义不同类型的关联关系,如一对一、一对多、多对一和多对多。 3. **实体类的注解示例** 一个简单的User实体类可能如下所示: ```java @Entity @...
和其它许多批注一样,在多对多关联中很多值是自动生成,党双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值,关联表名:主表表名+下划线+从表表名,关联到主表的外键名:主表名+下划线+...
本篇将详细讲解如何使用Hibernate实现多对多单向关联,包括注解(Annotation)和XML配置方式。 一、多对多关联的基本概念 多对多关联意味着一个实体可以与多个其他实体关联,反之亦然。例如,学生和课程的关系,一...
在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-Many)的关系映射是数据库关系模型中的常见关联类型。本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和...
- `@ManyToOne`:多对一关联,一个实体类的属性对应另一个实体类的多个实例。 - `@OneToMany`:一对多关联,一个实体类的实例对应另一个实体类的多个属性。 - `@ManyToMany`:多对多关联,两个实体类之间存在多对...
6. **@OneToMany, @ManyToOne, @OneToOne, @ManyToMany**: 用于定义关联关系,如一对一、一对多、多对多等。 7. **@Temporal**: 用于日期和时间字段的特殊处理,如TIMESTAMP、DATE或TIME。 8. **@Inheritance**...
### HibernateAnnotation ...通过上述介绍,我们可以看到HibernateAnnotation技术不仅简化了配置过程,而且提供了一种更加灵活的方式来管理对象与数据库之间的映射关系。这对于提高开发效率和维护性都有着重要的意义。