hibernate单边多对一关联
2015-09-20 22:23
435 查看
单边多对一与单边一对多情况相反,一般情况下是多的一方存有单方的引用,而单方没有多方的引用。本文以论文类别和论文作为实现背景。一个论文类别下面可以有多个论文,而一个论文只对应一个论文类别。
Type.java是论文类型的实体类,代码如下:
Article.java是论文的实体类,代码如下:
在hibernate.cfg.xml配置文件中配置两个实体类的mapping。如下:
打开HibernateSessionFactory.java文件,修改后的代码如图所示
(2)、单机选中ManyToOne.java测试类以java工程的方式运行。
(3)、运行成功后数据库中的内容如图所示
可见,类型(单方)表中没有存储论文(多方)的信息,而在论文的表中存储了单方的信息。
http://download.csdn.net/detail/yxtouch/9122821
1、建立java工程
2、使用MyEclipse添加hibernate依赖库和MySql相关的jar包
详细过程可参考http://blog.csdn.net/smilefyx/article/details/48596665中的实现。3、建立实体类
在工程中创建论文类别和论文的实体类对象,如本例中的两个实体类对象如下:Type.java是论文类型的实体类,代码如下:
package com.arvinfei.hibernate.bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "tb_type") public class Type { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(unique = true) private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Article.java是论文的实体类,代码如下:
package com.arvinfei.hibernate.bean; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name = "tb_article") public class Article { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @ManyToOne(cascade = { CascadeType.PERSIST }, fetch = FetchType.EAGER) @JoinColumn(name = "type_id") private Type type; private String name; @Column(columnDefinition = "longtext") private String content; public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } }
在hibernate.cfg.xml配置文件中配置两个实体类的mapping。如下:
4、修改HibernateSessionFactory
默认的HibernateSessionFactory中是以xml方式配置实体类的,而我们工程使用的是注解的方式,因此需要将其中xml之的方式修改为注解方式,具体修改内容如下:打开HibernateSessionFactory.java文件,修改后的代码如图所示
5、新建测试代码
新建ManyToOne类用于测试多对一关系。ManyToOne.java中的代码如下:package com.arvinfei.hibernate.test; import java.util.List; import org.hibernate.Session; import com.arvinfei.hibernate.bean.Article; import com.arvinfei.hibernate.bean.Type; import com.arvinfei.hibernate.util.HibernateSessionFactory; public class ManyToOne { public static void main(String[] args) throws Exception { Type type = new Type(); type.setName("web开发"); Article article = new Article(); article.setType(type); article.setName("hibernate的多对一学习"); article.setContent(" 单边的多对一是多方有一方的引用而一方没有多方的引用。"); Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); session.persist(article); List<Article> list = session.createQuery( " select a from Article a where a.name like '%多对一%' ").list(); for (Article a : list) { System.out.println("类别:" + a.getType().getName()); System.out.println("标题:" + a.getName()); System.out.println("概要:" + substring(a.getContent(), 50)); } session.getTransaction().commit(); session.close(); } private static String substring(String content, int i) { return content == null ? "" : content.length() < i + 1 ? content : content.substring(0, i); } }
6、测试
(1)、新建MySql数据库;本文使用如下命令进行新建一个名为manytoone的数据库。create database manytoone character set 'utf8';
(2)、单机选中ManyToOne.java测试类以java工程的方式运行。
(3)、运行成功后数据库中的内容如图所示
可见,类型(单方)表中没有存储论文(多方)的信息,而在论文的表中存储了单方的信息。
7、代码下载
本文的测试工程可以从如下地址获取:http://download.csdn.net/detail/yxtouch/9122821
相关文章推荐
- java-WEB中的监听器Lisener
- GUI - Web前端开发框架
- Extjs4.0 最新最全视频教程
- MyEclipse Web Project转Eclipse Dynamic Web Project
- axis备忘
- Erlang实现的一个Web服务器代码实例
- 防止网页脚本病毒执行的方法-from web
- 自学成才的秘密:115个 web Develop 资源
- 使用批处理修改web打印设置笔记 适用于IE
- Apache Web让JSP“动”起来
- web下载的ActiveX控件自动更新
- 推荐六款WEB上传组件性能测试与比较第1/10页
- 关于三种主流WEB架构的思考
- 使用 Iisext.vbs 列出 Web 服务扩展文件的方法
- 使用 Iisext.vbs 删除 Web 服务扩展文件的方法
- 使用 iisext.vbs 禁用 Web 服务扩展的方法
- 用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
- web标准知识——从p开始,循序渐进
- web标准知识――用途相似的标签
- Shell脚本实现的一个简易Web服务器例子分享