对象之间的关系有多对一,一对多和多对多三种,现在我们主要分析一下多对多
先看实体类:
User
private int id;
private String username;
private Set<Role> roles;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@ManyToMany
@JoinTable(name = "userrole", joinColumns = { @JoinColumn(name = "userid") }, inverseJoinColumns = { @JoinColumn(name = "roleid") })
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
Role
private int id;
private String role;
private Set<User> users;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@ManyToMany(mappedBy = "roles")
@JoinTable(name = "userrole", joinColumns = { @JoinColumn(name = "roleid") }, inverseJoinColumns = { @JoinColumn(name = "userid") })
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
我们来解释一下注解配置.
@ManyToMany:配置User和Role的关系为多对多.
@JoinTable(name = "userrole":配置关系表的名称
joinColumns = { @JoinColumn(name = "userid") }:关系表中与本实体对象关联的字段,本实体中的字段默认为id.完整的写法为
joinColumns = { @JoinColumn(name = "userid", referencedColumnName = "id") }
inverseJoinColumns = { @JoinColumn(name = "roleid") }关系表中与另外一个实体对象关联的字段
mappedBy = "roles":该配置表示由User中的roles来维护关系,即User中的roles变化时,关系表随着变化,而Role中的users变化是,关系表不随之改变.
Hibernate ManyToMany 默认为延迟加载,即查询User的时候默认不会查询roles.要同时查询出roles.需要用Criteria查询:
UserDao
public User getUserDetail(int id) {
Criteria c = getSession().createCriteria(User.class);
c.add(Restrictions.eq("id", id));
c.setFetchMode("roles", FetchMode.JOIN);
return (User) c.uniqueResult();
}
分享到:
相关推荐
hibernate5_ManyToMany多对多单向维护 hibernate5_ManyToMany多对多单向维护
这个是一个简单的实现manytomany的例子,这样可以实现数据库中多对多的关系 这个项目演示了如何配置多对多,使多对多的关系很明朗。
问题:如何跨多对多关系的两个实体投影列示例:员工(id、名字、姓氏)会议(id、主题、会议日期) 假设我们有员工数据 1 , A, AA 2 , B, BB 会议 1,AB 会议,X 2,另一个会议,X 3,仅 B Employee_Meeting AB A 和...
hibernate对象三状态及OneToOne&OneToMany&ManyToMany讲解,代码示例,数据库示例!非常全面
用于映射多对多关系的 Hibernate 注释
hibernate中manytomany关系 实体类中有个集合方的是这个实体类本身
NULL 博文链接:https://chen-rojer-gmail-com.iteye.com/blog/696471
在 Hibernate 中,CascadeType属性通常用于@OneToMany、@ManyToOne和@ManyToMany注解中,用于定义实体之间的级联操作。例如,在订单系统中,订单和订单项之间的关系可以使用@OneToMany注解,并设置CascadeType为ALL...
Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity ...
博客地址:http://blog.csdn.net/smilefyx/article/details/48931721
targetEntity = org.hibernate.test.annotations.manytomany.Employee.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE} ) @JoinTable( name = "EMPLOYER_EMPLOYEE", joinColumns = {@JoinColumn...
NULL 博文链接:https://cdxs2.iteye.com/blog/1932869
本程序包含: hibenate 上传图片,二进制数据,大文本,集合映射的多种关系,onetoone,ontomany,manytomany等关系详细代码示例以及注释,全部由本人测试通过,对理解hibernate配置有极大帮助。
详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) ...cascade表示级联操作,在hibernate配置注解@OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的属性。 例如: @ManyToOne(c
参考博客 http://blog.csdn.net/smilefyx/article/details/48931431
魔力对魔力的关系 作者 书 所有者是Book类,我们没有在所有者类中放置mappedBy (在这里我们犯了... @ManyToMany @JoinTable(name = "author_book", joinColumns = {@JoinColumn(name = "books_id")}, inverseJoinC
@ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台处理 服务器端Service和DAO编写整合springdatajpa 业务层接口 修改 Action 代码调用 ...
javax.persistence.ManyToMany.class javax.persistence.ManyToOne.class javax.persistence.MapKey.class javax.persistence.MapKeyClass.class javax.persistence.MapKeyColumn.class javax.persistence....
医院预约系统End-End Java Spring Boot应用程序和重新检查... 这个微型项目的概念介绍:1.Hibernate继承2.Spring数据JPA关联1.ManyToMany 2.OneToMany 3.ManyToOne 3.组件继承4.Java 8新概念1.Funtional接口2.Streams
项目中使用的一种服务,两个存储库,两个持久性对象ORM是Hibernate Persistence DB是MongoDB在两个单独的集合中持久化在一个数据库中的对象。 实体之间的关系策略是MANYtoMANY-可以将多个客户分配到一个帐户,可以...