hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

简介:   前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.

  前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.现在开发中(据说)也越来越流行使用注解,这里贴一个使用注解开发的小例子.

  假设有两张表,一张书籍表Book,一张书籍分类表Category,很明显Book和Category是多对一的关系.使用注解应该这样配置:

新建Book实体类:

//entity表示需要持久化的实体类
@Entity
//实体类多对应的表
@Table(name="t_book")
public class Book {
    //id主键
    @Id
    //设置主键生成策略,这里的auto表示自增长 与native对应,
   //(strategy------表示主键生成策略:  
     //  GenerationType.AUTO   默认值。表示让ORM框架自动选择,对应hibernate中的native;
     //  GenerationType.TABLE  使用表一保存ID的值;
     //  GenerationType.IDENTITY  根据数据库的Identity字段生成;
     //  GenerationType.SEQUENCE  根据数据库表的Sequence字段生成;)
@GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name; private double price; private String author; private Date pubDate; //get/set方法省略 }

新建Category实体类:

@Entity
@Table(name="t_category")
public class Category {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    //一端的配置    @OneToMany(mappedBy="多端的属性")
    @OneToMany(mappedBy="category")
    private Set<Book> books=new HashSet<Book>();
//get/set方法省略
}

  将两个实体类添加到Hibernate.cfg.xml中去,注意因为添加的是类,不是xml文件,所以包名之间用的是"."而不是"/"相隔.

以上就完成了配置,是不是相当简单.下面新建一个测试类,测试1:自动生成表2:保存数据3:读取数据:

@Test
    public void testCreateDB(){
        Configuration cfg=new  Configuration().configure();
        SchemaExport se=new SchemaExport(cfg);
        se.create(true, true);
    }
    
    @Test
    public void testSave(){
        Session session=HibernateUtil.getSession();
        Book book=new Book();
        book.setAuthor("金庸");
        book.setName("鹿鼎记");
        book.setPrice(12.35);
        book.setPubDate(new Date());
        Book book1=new Book();
        book1.setAuthor("土豆");
        book1.setName("斗破苍穹");
        book1.setPrice(22.35);
        book1.setPubDate(new Date());
        
        Category c1=new Category();
        c1.setName("武侠类");
        book.setCategory(c1);
        
        Category c2=new Category();
        c2.setName("玄幻类");
        book1.setCategory(c2);
        
        session.save(book);
        session.save(book1);
        session.beginTransaction().commit();
        session.close();
    }
    
    @Test
    public void testGet(){
        Session session =HibernateUtil.getSession();
        
        Book b=(Book)session.get(Book.class, 1);
        System.out.println("书籍名称:"+b.getName()+",类别:"+b.getCategory().getName());
        System.out.println("=========================");
        Category c=(Category)session.get(Category.class, 1);
        System.out.print("类别:"+c.getName()+",书籍名称:");
        Iterator<Book> it = c.getBooks().iterator();
        while(it.hasNext()){
            System.out.print(it.next().getName());
        }
        session.beginTransaction().commit();
        session.close();        
    }

注意:

   1.使用注解需要导入的4个jar包:hibernate-commons-annotations.jar , hibernate-annotations.jar,ejb3-persistence.jar ,hibernate-jpa-2.0-api-1.0.1.Final.jar

  2.使用注解配置映射关系,不再需要*.hbm.xml文件,而是在实体类中以注解形式定义映射关系.

  3.注解在javax.persistence包下,而不是在hibernate包下,特别注意.

 

相关文章
|
7月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
|
3月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
54 4
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
93 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
Java 数据库连接 数据库
AI 时代风起云涌,Hibernate 实体映射引领数据库高效之路,最佳实践与陷阱全解析!
【8月更文挑战第31天】Hibernate 是一款强大的 Java 持久化框架,可将 Java 对象映射到关系数据库表中。本文通过代码示例详细介绍了 Hibernate 实体映射的最佳实践,包括合理使用关联映射(如 `@OneToMany` 和 `@ManyToOne`)以及正确处理继承关系(如单表继承)。此外,还探讨了常见陷阱,例如循环依赖可能导致的无限递归问题,并提供了使用 `@JsonIgnore` 等注解来避免此类问题的方法。通过遵循这些最佳实践,可以显著提升开发效率和数据库操作性能。
86 0
|
4月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
47 0
|
6月前
|
JSON Java 数据库连接
Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题
34 2
|
7月前
|
Java 数据库连接
hibernate注解实体类(Emp.java)
hibernate注解实体类(Emp.java)
|
7月前
|
Java 数据库连接
hibernate注解的测试
hibernate注解的测试
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
|
7月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate