在hibernate中经常遇到用户组与用户关系的映射,在这里其实是一对多或多对一的关系,这个用户组与用户可以用下面语句描述:
一个用户组可包含很多用户,但一个用户只能属于一个用户组
先来讨论在用户表里嵌入用户组id的情况:
上代码(采用注解,后面有xml配置说明):
package suse.ly.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; /** * 用户组类 * @author ly-suse * */ @Entity @Table(name="t_group") public class Group { private int id; private String name; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
用户类;
package suse.ly.domain; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * 用户类 * @author ly-suse * */ @Entity @Table(name="t_user") public class User { private int id; private String name; private Group group; @ManyToOne(fetch=FetchType.LAZY) //(多对一,每个用户组可以包含多个用户) public Group getGroup() { return group; } @Id @GeneratedValue public int getId() { return id; } public String getName() { return name; } public void setGroup(Group group) { this.group = group; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } }
然后运行测试:
new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
运行结果:
alter table t_user drop foreign key FKCB63CCB6C41AE897
drop table if exists t_group
drop table if exists t_user
create table t_group (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_user (id integer not null auto_increment, name varchar(255), group_id integer, primary key (id))
alter table t_user add index FKCB63CCB6C41AE897 (group_id), add constraint FKCB63CCB6C41AE897 foreign key (group_id) references t_group (id)
从结果可以看出t_user表里含有group_id这个外键
xml配置如下:
Group.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="suse.ly.domain.Group" > <id> <generator class="native"></generator> </id> <property name="name"></property> </class> </hibernate-mapping>
User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="suse.ly.domain.User" > <id> <generator class="native"></generator> </id> <many-to-one name="group" column="groupId"></many-to-one> </class> </hibernate-mapping>
运行结果如上一样。
相关推荐
7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...
在2016年,传智播客黑马程序员发布的Hibernate教程中,特别选用了Hibernate 5.0.7.Final版本,这个版本在功能和性能上都有显著提升,是学习和开发中非常值得参考的一个里程碑。 1. Hibernate 5.0.7.Final概述 ...
2. 探索映射:深入理解实体类与数据库表之间的映射机制,包括一对一、一对多、多对一、多对多关系的配置。 3. 深入查询:掌握HQL和Criteria API的高级用法,如分页、排序、子查询等。 4. 事务管理:了解Hibernate的...
1. **对象关系映射(ORM)**:Hibernate通过XML配置文件或注解,将Java类与数据库表进行映射,使得我们可以像操作普通Java对象一样操作数据库,减少了对SQL的直接依赖,提高了代码的可读性和可维护性。 2. **...
3.3 版本在前代基础上进行了多方面的改进,包括性能优化、新的查询语言 HQL(Hibernate Query Language)以及对 JPA(Java Persistence API)的支持等。 二、核心组件 1. SessionFactory:它是 Hibernate 的核心,...
这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...
6. **关联映射**:包括一对一、一对多、多对一、多对多的关系映射,允许对象之间的复杂关系映射到数据库表。 7. **延迟加载**:Hibernate允许在真正需要时才加载关联对象,减少内存消耗和提高性能。 ### 使用...
3. 支持更多的数据库:除了常见的MySQL、Oracle等,Hibernate 3.5.6还支持更多数据库系统,包括PostgreSQL、SQL Server等,扩大了其应用范围。 4. 性能优化:此版本对缓存机制进行了优化,提高了查询效率,同时改进...
Hibernate支持多种关联映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。这些关联可以通过定义外键或使用中间表来实现,使得对象间的复杂关系得以轻松处理。 ...
Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,为开发者提供了便捷的数据库操作方式,极大地简化了Java应用中的数据访问层代码。在5.0.11.Final版本中,Hibernate引入了一系列的改进和优化,使其...
《深入理解Hibernate-JPA 2.1 API:源码解析与应用实践》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而Hibernate对Java Persistence API (JPA) 的支持,使得开发者...
Hibernate Validator是Hibernate项目的一个重要组成部分,它是一个基于JSR-303(Bean Validation)规范的实现,提供了强大的Java Bean数据验证功能。这次我们关注的是Hibernate Validator的4.1.0.Final版本,该版本...
`3.6.6.Final`表示这是Hibernate框架的一个稳定版本,Final表示这是一个最终发布版,意味着经过了多轮测试和修正,具有较高的稳定性和兼容性。`tar.gz`是一种常见的文件打包格式,用于在Unix/Linux环境下压缩和归档...
1. 实体类设计:使用注解定义实体类,如用户(User)和角色(Role)之间的多对多关系: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) ...
3. **关系映射注解**:@OneToOne、@OneToMany、@ManyToOne和@ManyToMany分别用于一对一、一对多、多对一和多对多的关系映射,它们可以配合@JoinColumn或@JoinTable进一步配置关联细节。 4. **继承注解**:@...
在`hibernate-release-4.3.5.Final`中,一个关键的改进是对JPA 2.1规范的支持,这包括了新的特性如多租户、存储过程调用以及对Java 8日期时间API的支持。多租户功能允许在一个数据库实例中管理多个独立的应用数据,...
10. **关联映射**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)的映射,通过`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`等注解实现。 11. **懒加载和...
例如,@ManyToOne表示一对多的关系,@OneToOne表示一对一的关系,@OneToMany则用于处理多对一的关联,而@ManyToMany则用于处理多对多的复杂关联。这些注解使得对象关系的映射变得直观且易于维护。 此外,该版本还...
Hibernate是一种开源的ORM框架,它允许开发者使用面向对象的方式处理数据库,将Java对象与数据库表进行映射,从而降低了数据库操作的复杂性。通过提供API和配置文件,Hibernate实现了数据的持久化,使得程序能够轻松...
Hibernate Validator 5.2.4.Final是该框架的一个稳定版本,包含了多项功能和改进。 首先,我们来了解Bean Validation。这是一个用于验证业务对象属性的框架,它允许开发者定义一套规则,这些规则会在数据被处理前...