hibernate注解之@Onetomany、@Manytoone、@JoinColumn
2024-08-31 02:36:28
@Onetomany用于实体类与数据库表映射中少的一方,请看下面的例子。
假设一个用户只有一种角色,用户和角色是onetomany的关系
用户实体
@Entity
@Table(name="user")
public class UserEntity implements Serializable{ @Id
@GenericGenerator(name="generator",strategy="uuid")
@GeneratedValue(generator="generator")
@Column(name="id")
private String id;
@Column(name="userName")
private String userName;
@Column(name="password")
private String password;
@Temporal(value=TemporalType.TIMESTAMP)
private Date createDate;
......
角色实体
@Entity
@Table(name="role")
public class RoleEntity implements Serializable{ @Id
@GenericGenerator(name="generator",strategy="uuid")
@GeneratedValue(generator="generator")
@Column(name="id")
private String id;
@Column(name="name")
private String name;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.PERSIST)
private Set<UserEntity> user;
同时设置配置文件为<prop key="hibernate.hbm2ddl.auto">update</prop>
那么在项目启动后会自动生成三张表,分别是
角色表
用户表
角色用户表
@Onetomany 的参数:
mappedBy:用于双向关联时使用,否则会引起数据不一致的问题。
fetch:可取的值有FetchType.EAGER和FetchType.LAZY,前者表示主类被加载时加载,后者表示被访问时才会加载
cascade:CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)、CascadeType.ALL(选择全部)
@Manytoone
用于多对一,请看下例,
用户实体类
@Entity
@Table(name="user")
public class UserEntity implements Serializable{
@Id
@GenericGenerator(name="generator",strategy="uuid")
@GeneratedValue(generator="generator")
@Column(name="id")
private String id;
@Column(name="userName")
private String userName;
@Column(name="password")
private String password;
@Temporal(value=TemporalType.TIMESTAMP)
private Date createDate;
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,optional=true)
@JoinColumn(name="roleid",nullable=true)
private RoleEntity role;
这样在项目启动后只有两种表
role表
user表
@Manytoone的参数:optional 属性是定义该关联类对是否必须存在,值为false时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。 值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。 optional 属性的默认值是true。
其它属性与onetomany相同。
@JoinColumn
与@Column用法相同,区别是@JoinColumn作用的属性必须是实体类
最新文章
- .NET 新标准介绍
- -[UIKeyboardLayoutStar release]: message sent to deallocated instance 0x7fbe49120000
- Verilog学习笔记简单功能实现(八)...............同步FIFO
- C++ 内联函数笔记
- JAVA 理解封装的概念,private私有的,public公有的
- [iOS微博项目 - 3.2] - 发送微博
- MTD技术介绍
- JavaScript 克隆对象
- UVALive 5791 Candy&#39;s Candy 解题报告
- 关联查询一张小表。对性能有影响吗(mysql)
- 网络通信 -->; CRC校验
- 洞见世界(1): 拉勾网大数据告诉你, 会计最高月薪达33k!
- 为什么Python编程被国家教育如此重视?请开始你的表演!
- resnet代码分析
- 使用iframe方式获得svg中的DOM元素,和svg 的 contentDocument 返回 null
- IDEA中添加javap反编译
- django-用户验证系统
- 4889: [Tjoi2017]不勤劳的图书管理员 树套树
- 单域名下多子域名同时认证HTTPS
- 自己写的一个Solr搜索实例,增删改查+高亮+分页
热门文章
- [bzoj1232][Usaco2008Nov]安慰奶牛cheer_Kruskal
- Linux网络编程:UDP实现可靠的文件传输
- $.getJSON() 未能执行回调函数的缘由
- 查看及更改MySQL数据库物理文件存放的位置
- Boost Replaceable by C++11 language features or libraries
- java学习笔记:Eclipse打开现有项目
- 将分布式-队列的实现交给redis
- 【SCOI 2011】 糖果
- E20170624-ts
- php使用163邮箱发送邮件