Hibernate中ManyToOne,OneToMany,OneToOne的使用例
2016-07-12 15:33
507 查看
有3个表:
News:新闻表
NewsResource:新闻附件表
Resource:资源表
表关系:
1个新闻(News)对应多条新闻附件(NewsResource)
News:ID <---> NewsResource:news_id
1个新闻附件(NewsResource)对应1个资源(Resource)。
NewsResource:resource_id <---> Resource:ID
实体类如下:
NewsResource:
关于NewsResource表,有两种写法:
方法1:
这种写法用于不想和news表做级联更新,只想做级联查询的情况。news_id和resource_id都定义了2次,上面@Column用于自己表的更新,下面的@JoinColumn用于级联查询的时候的Join列。
方法2:
这种写法就是典型的级联查询+级联更新。
Resource:
另外,懒加载(LAZY)如果遇到问题,请参照相关文章:
http://blog.csdn.net/sunroyi666/article/details/51890571
News:新闻表
NewsResource:新闻附件表
Resource:资源表
表关系:
1个新闻(News)对应多条新闻附件(NewsResource)
News:ID <---> NewsResource:news_id
1个新闻附件(NewsResource)对应1个资源(Resource)。
NewsResource:resource_id <---> Resource:ID
实体类如下:
News:
@Entity @Table(name="news") public class NewsEntity implements Serializable{ private static final long serialVersionUID = 48L; @Id @GeneratedValue @Column(name="ID") private Long id; @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="news") private Set<NewsResourceEntity> newsResource; //其他内容省略 }
NewsResource:
关于NewsResource表,有两种写法:
方法1:
这种写法用于不想和news表做级联更新,只想做级联查询的情况。news_id和resource_id都定义了2次,上面@Column用于自己表的更新,下面的@JoinColumn用于级联查询的时候的Join列。
@Entity @Table(name="newsresource") public class NewsResourceEntity implements Serializable{ private static final long serialVersionUID = 48L; @Id @GeneratedValue @Column(name="ID") private Long id; @Column(name = "news_id") private Long newsId; @Column(name = "resource_id") private Long resourceId; @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinColumn(name="news_id", insertable = false,updatable = false) private NewsEntity news; @OneToOne(optional = false, cascade = CascadeType.MERGE) @JoinColumn(name = "resource_id", referencedColumnName = "id", unique = true, insertable = false,updatable = false) private ResourceEntity resource; //其他内容省略 }
方法2:
这种写法就是典型的级联查询+级联更新。
<pre name="code" class="java">@Entity @Table(name="newsresource") public class NewsResourceEntity implements Serializable{ private static final long serialVersionUID = 48L; @Id @GeneratedValue @Column(name="ID") private Long id; @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinColumn(name="news_id") private NewsEntity news; @OneToOne(optional = false, cascade = CascadeType.MERGE) @JoinColumn(name = "resource_id", referencedColumnName = "id", unique = true) private ResourceEntity resource; //其他内容省略 }
Resource:
@Entity @Table(name="resource") public class ResourceEntity implements Serializable { private static final long serialVersionUID = 48L; @Id @GeneratedValue @Column(name="ID") private Long id; @OneToOne(optional = true, cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy = "resource") private NewsResourceEntity newsResource; //其他内容省略 }
另外,懒加载(LAZY)如果遇到问题,请参照相关文章:
http://blog.csdn.net/sunroyi666/article/details/51890571
相关文章推荐
- Quartz配置问题
- 基于 flask 框架的模拟instagram 图片分享网站的开发 6
- 19javascript与框架
- 圆形图片CircleImageView的使用和分析
- Spring-7:使用外部属性文件
- category
- Java XML解析工具 dom4j介绍及使用实例
- Libsvm:脚本(subset.py、grid.py、checkdata.py) | MATLAB/OCTAVE interface | Python interface
- Android MediaPlayer分析
- 【Codeforces 682D】【String】
- 40.TabLayout的简单使用
- 日常任务优先级管理
- java初识类和对象
- [华为OJ] 判断两个IP是否属于同一子网
- 18javaScript与表单
- sql约束
- MySQL同步到Hive操作步骤
- 并查集
- 开博客的第一天
- 笔记----httpd安装启动流程