hibernate多对多注解配置
上一篇文章主要讲解了Hibernate多对多配置文件的配置方法,接下来继续讲解注解方式配置多对多关系的方法。注解功能已经加入hibernate4之中了,但hibernate3要使用注解配置还需要另外引入jar包。
需要的jar包可见附件:
接下来开始进入正题:
一、第一种直接配置多对多关系,以Role角色-Right权限为例。
import java.util.Date; import java.util.List; import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="SYS_ROLE") public class Role{ private String role_id; private String role_name; private Date cre_time; private String parent_id; private String describe; private int sort; private List<Right> rights; @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") public String getRole_id() { return role_id; } public void setRole_id(String roleId) { role_id = roleId; } @Column(name="role_name") public String getRole_name() { return role_name; } public void setRole_name(String roleName) { role_name = roleName; } @Column(name="cre_time") public Date getCre_time() { return cre_time; } public void setCre_time(Date creTime) { cre_time = creTime; } @Column(name="parent_id") public String getParent_id() { return parent_id; } public void setParent_id(String parentId) { parent_id = parentId; } @Column(name="describe") public String getDescribe() { return describe; } public void setDescribe(String describe) { this.describe = describe; } @Column(name="sort") public int getSort() { return sort; } public void setSort(int sort) { this.sort = sort; } //多对多映射 @ManyToMany(targetEntity = Right.class, fetch = FetchType.LAZY) @JoinTable(name = "ROLE_RIGHT", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "RIGHT_ID")) public List<Right> getRights() { return rights; } public void setRights(List<Right> rights) { this.rights = rights; } @Override public String toString() { return "Role [cre_time=" + cre_time + ", describe=" + describe + ", parent_id=" + parent_id + ", role_id=" + role_id + ", role_name=" + role_name + ", sort=" + sort + "]"; } }
import java.util.List; import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="SYS_RIGHTS") public class Right{ private String right_id; private String right_name; private String url; private String parent_id; private int lev; private int sort; private List<Role> roles; @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") public String getRight_id() { return right_id; } public void setRight_id(String rightId) { right_id = rightId; } @Column(name="right_name") public String getRight_name() { return right_name; } public void setRight_name(String rightName) { right_name = rightName; } @Column(name="url") public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @Column(name="parent_id") public String getParent_id() { return parent_id; } public void setParent_id(String parentId) { parent_id = parentId; } @Column(name="lev") public int getLev() { return lev; } public void setLev(int lev) { this.lev = lev; } @Column(name="sort") public int getSort() { return sort; } public void setSort(int sort) { this.sort = sort; } //多对多映射 @ManyToMany(mappedBy="rights") public List<Role> getRoles() { return roles; } public void setRoles(List<Role> roles) { this.roles = roles; } @Override public String toString() { return "Right [lev=" + lev + ", parent_id=" + parent_id + ", right_id=" + right_id + ", right_name=" + right_name + ", sort=" + sort + ", url=" + url + "]"; } }
最后,在hibernate-cfg.xml文件中配置对应的Role和Right实体即可。
<mapping class="com.entor.hibernate.manytomany.Role"/> <mapping class="com.entor.hibernate.manytomany.Right"/>
到这里一个多对多配置就完成了。
常用的注解:
1.@Entity 声明实体
2.@Table(name="SYS_ROLE") 声明实体类对应的表名
3.@Column(name="role_name") 声明属性对应的列
4.@Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
声明主键及生成策略,在这里uid的生成策略
5. @OneToOne(mappedBy="card") 一对一映射
6.@OneToMany(fetch = FetchType.LAZY, mappedBy = "student") 一对多映射
7.@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "student")
多对一映射
8.@ManyToMany(targetEntity = Right.class, fetch = FetchType.LAZY)
@JoinTable(name = "ROLE_RIGHT", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "RIGHT_ID"))
多对多映射
9.@Transient 表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性
二、第二种情况,就是在中间实体中配置两个多对一关系,以学生Student-成绩Score-课程Course为例。
import java.util.List; import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="student") public class Student { private String id; private String name; private List<Score> scoreList; @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") public String getId() { return id; } public void setId(String id) { this.id = id; } @Column(name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } //学生端一对多,学生的成绩列表,也可以选择不配置 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "student") public List<Score> getScoreList() { return scoreList; } public void setScoreList(List<Score> scoreList) { this.scoreList = scoreList; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="score") public class Score { private String id;//主键id private Student student;//学生id private Course course;//课程id private int score;//成绩 @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") public String getId() { return id; } public void setId(String id) { this.id = id; } //多对一映射 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "student") public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } //多对一映射 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "course") public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } @Column(name="score") public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public String toString() { return "Score [course=" + course.getName() + ", score=" + score + ", student=" + student.getName() + "]"; } }
import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="course")
public class Course {
private String id;
private String name;
private List<Score> scoreList;
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//课程端一对多,课程的成绩列表,也可以选择不配置
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "course")
public List<Score> getScoreList() {
return scoreList;
}
public void setScoreList(List<Score> scoreList) {
this.scoreList = scoreList;
}
@Override
public String toString() {
return "Course [id=" + id + ", name=" + name + "]";
}
}
以上就是多对多两种情况的注解配置方法了,注解方式真的是很优秀的配置方法,很直观很简洁一目了然,也不需要另外配置xml文件,直接在实体类文件中注明数据库关系映射的情况即可,开发效率提高很明显,我用过注解配置之后都不想用配置文件来配置了,哈哈~
相关推荐
- `@OneToMany`、`@ManyToOne`、`@OneToOne`、`@ManyToMany`:表示不同类型的关联关系,例如一对多、多对一、一对一和多对多。 3. **配置自动建表**: - 在Hibernate的配置文件(hibernate.cfg.xml)中,可以通过...
`hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...
本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...
3. `org.hibernate.cfg`:这里的类主要用于配置和初始化Hibernate环境,如`AnnotationConfiguration`类就是配置Hibernate的入口,它会读取注解并生成相应的映射信息。 4. `org.hibernate.boot.model`和`org....
"hibernate-annotations"是Hibernate的一个扩展,引入了Java注解来定义对象-关系映射,替代了传统的XML配置文件。这样使得映射信息可以直接嵌入到Java类中,使得代码更加简洁,也更容易理解和维护。例如,`@Entity`...
7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...
本篇文章将深入探讨Hibernate中注解的一对多、多对多和一对一关系映射。 ### 一对多关系 在现实生活中,例如一个班级有一个班主任,而班主任可以管理多个学生,这就是典型的“一对多”关系。在Hibernate中,我们...
本实例"spring-hibernate注解配置源码"旨在展示如何在不使用XML配置的情况下,通过注解的方式整合Struts2、Spring和Hibernate,创建一个完整的MVC(模型-视图-控制器)架构的应用。下面将详细介绍这个过程中的关键...
总结一下,Hibernate的一对多关联映射通过注解方式定义了对象间的关联关系,使得我们在编程时能够以面向对象的方式操作数据,而底层数据库的操作则由Hibernate自动完成。这种方式大大提高了开发效率,同时也降低了...
在Java的持久化框架Hibernate中,单向多对多映射是一种常见的关系映射方式,尤其在处理数据库中两个实体间复杂关联时显得尤为重要。在注解版的Hibernate中,我们不再需要传统的XML配置文件,而是直接在实体类上使用...
在Hibernate的hbm.xml文件中,一对一关系通过<one-to-one>标签,一对多关系通过、、或标签来定义。需要详细指定实体类名、主键列名以及关联的外键列名。 2. 注解配置: 在实体类上直接使用@OneToOne、@OneToMany等...
在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...
本教程将重点讲解如何在Hibernate中实现多对一的映射关系,采用的是注解方式进行配置。 **一、多对一关系** 在数据库设计中,多对一关系表示一个实体可以与另一个实体的多个实例相关联。例如,一个部门可以有多名...
在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...
在Hibernate框架中,注解配置被广泛用于简化对象关系映射(ORM)的配置,使得Java Bean可以直接与数据库表进行关联。本篇文章将深入探讨如何使用注解配置Java Bean并建立Hibernate的关联关系。 首先,我们需要理解...
它通过XML或注解的方式定义对象与数据库表之间的映射关系,使得开发者可以像操作普通Java对象一样操作数据库数据,减少了对SQL的直接依赖。 二、5.3.2.Final新特性 1. 性能优化:5.3.2.Final版本在性能方面进行了...
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。在本案例中,我们将深入探讨如何使用Hibernate来处理多对多的关系映射,...
### Hibernate注解配置详解 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。在使用Hibernate的过程中,开发者可以通过注解来实现对象与数据库表之间...
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...
在3.4.0的Hibernate注解与3.3.2的Hibernate核心之间进行集成,需要确保所有依赖的JAR文件正确配置,包括Hibernate的各个模块(如hibernate-core、hibernate-entitymanager等)以及JTA(Java Transaction API)和JPA...