Hibernate Annotation 实战:映射实体类

需积分: 3 40 下载量 72 浏览量 更新于2024-08-01 收藏 286KB PDF 举报
"这篇资源主要介绍了如何使用Hibernate的注解方式来实现对象关系映射,适合初学者入门。" 在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库与Java对象之间的交互。 Hibernate Annotation是Hibernate的一个扩展,允许开发者使用Java注解(Annotation)来替代传统的XML配置文件进行对象关系映射(ORM)。这种方式使得代码更加简洁,更易于维护。 首先,要开始使用Hibernate Annotation,你需要下载相关的库文件。推荐下载`hibernate-distribution-3.3.2.GA`和`hibernate-annotations-3.4.0.GA`版本,同时还需要SLF4J的日志库,以便在程序运行时记录日志。在项目中,你需要将这些库的jar文件导入到类路径(classpath)中,包括`hibernate3.jar`,`javassist`,`dom4j`,`jta`,`slf4j`以及特定数据库驱动(如`mysql.jar`)等。 接下来,让我们看看如何通过Annotation来映射实体。在Java编程中,你可以使用以下注解来定义一个实体类: 1. `@Entity`:这个注解标记一个类作为Hibernate管理的实体类。例如: ```java @Entity public class User { // ... } ``` 2. `@Table`:用于指定实体类对应的数据库表名。例如: ```java @Entity @Table(name = "users") public class User { // ... } ``` 3. `@Id`:标识实体类中的主键字段。可以配合`@GeneratedValue`来自动生成主键。例如: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // ... } ``` 4. `@Column`:用于指定字段对应的数据库列名,可以设置长度、是否允许为空等属性。例如: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "username", nullable = false, length = 50) private String username; // ... } ``` 5. `@ManyToOne`, `@OneToMany`, `@OneToOne`, `@ManyToMany`:这些注解用于定义实体之间的关联关系。例如,用户与角色的多对多关系: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToMany @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) private Set<Role> roles; // ... } @Entity @Table(name = "roles") public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // ... } ``` 完成实体类的定义后,你需要配置Hibernate的SessionFactory。在没有XML配置的情况下,通常会创建一个配置类,使用`AnnotationConfiguration`或者`Configuration`,并调用`configure()`方法加载配置。然后,通过`addAnnotatedClass()`方法添加注解的实体类,最后构建SessionFactory。 ```java import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; import org.hibernate.Transaction; public class HibernateUtil { private static SessionFactory sessionFactory; static { try { Configuration config = new AnnotationConfiguration(); config.configure(); // 读取hibernate.cfg.xml配置文件 config.addAnnotatedClass(User.class); // 添加注解实体类 sessionFactory = config.buildSessionFactory(); } catch (Exception e) { e.printStackTrace(); } } public static Session getSession() throws HibernateException { return sessionFactory.openSession(); } } ``` 在实际操作数据库时,可以创建一个Session对象,并通过Transaction进行事务处理,增删改查操作。例如: ```java Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); User user = new User(); // 初始化user对象... session.save(user); tx.commit(); session.close(); ``` 这就是使用Hibernate Annotation的基本流程。通过这种方式,你可以更直观地在Java类中看到数据库映射关系,减少了外部配置文件的依赖,提高了开发效率。然而,值得注意的是,虽然注解方式简化了配置,但在大型项目中,可能需要结合XML配置来达到更灵活的配置需求。
2015-12-10 上传
前言 1. 翻译说明 2. 版权声明 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 2.2. 用EJB3注解进行映射 2.2.1. 声明实体bean 2.2.1.1. 定义表(Table) 2.2.1.2. 乐观锁定版本控制 2.2.2. 映射简单属性 2.2.2.1. 声明基本的属性映射 2.2.2.2. 声明列属性 2.2.2.3. 嵌入式对象(又名组件) 2.2.2.4. 无注解之属性的默认值 2.2.. 映射主键属性 2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. 访问类型 2.4.3.2. 公式 2.4.3.3. 类型 2.4.3.4. 索引 2.4.3.5. @Parent 2.4.3.6. 生成的属性 2.4.4. 继承 2.4.5. 关于单个关联关系的注解 2.4.5.1. 延迟选项和获取模式 2.4.6. 关于集合类型的注解 2.4.6.1. 参数注解 2.4.6.2. 更多的集合类型 2.4.7. 缓存 2.4.8. 过滤器 2.4.9. 查询 3. 通过XML覆写元数据 3.1. 原则 3.1.1. 全局级别的元数据 3.1.2. 实体级别的元数据 3.1.3. 属性级别的元数据 3.1.4. 关联级别的元数据 4. Hibernate验证器 4.1. 约束 4.1.1. 什么是约束? 4.1.2. 内建约束 4.1.3. 错误信息 4.1.4. 编写你自己的约束 4.1.5. 注解你的领域模型 4.2. 使用验证器框架 4.2.1. 数据库schema层次验证 4.2.2. Hibernate基于事件的验证 4.2.3. 程序级验证 4.2.4. 验证信息 5. Hibernate与Lucene集成 5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引 A. 术语表