`

Hiberante(四) OneToMany_xml 单向关联

 
阅读更多

 (1)  oneToMany 单向

 

   java类:Comment    Message

public class Comment {

	private int id;
	private String content;
      省略get(),set();  
}
public class Message {
  private int id;
  private String title;
  private String content;
  private Set<Comment> comments;
 省略get(),set();
}

Message.hbm.xml文件

<hibernate-mapping package="org.th.model">
    <class name="Message" table="t_message" >
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="title"></property>
        <property name="content"></property>
        
        <!-- 使用了lazy="extra"   当返回结果是数字会使用count,否则使用投影  (智能一点)-->
        <set name="comments"  lazy="extra">
        <!--key用来指定在对方的外键名称  -->
             <key column="mid"></key>
        <!-- class 用来设置列表中的对象类型  -->    
             <one-to-many class="Comment"/>
        </set>
    </class>
</hibernate-mapping>

 Comment.hbm.xml

<hibernate-mapping package="org.th.model">
    <class name="Comment" table="t_comment" >
        <id name="id">
           <generator class="native"></generator>
        </id>
        <property name="content"></property>
    </class>
</hibernate-mapping>

 

 测试类:OneToMany

public class OneToMany {

	 @Test
	 public void testAdd(){
		 Session session=null;
			try {
				session = HibernateUtil.openSession();
				session.beginTransaction();
				Comment c1=new Comment();
				c1.setContent("黑河");
				Comment c2=new Comment();
				c2.setContent("白河");
				session.save(c1);session.save(c2);
				Message m=new Message();
				m.setTitle("中国好声音");
				m.setContent("123");
				m.addComment(c1);
				m.addComment(c2);
				session.save(m);
				//此时会发出5条sql  2条保存c1,c2。一条保存Message(其中addComment(c1) 由于延迟加载,只是将c1的id存在当中) 
				//当提交事务的 时候session中的对象会与内存中进行比较,不相同即update 
				session.getTransaction().commit();
			} catch (Exception e) {
				e.printStackTrace();
				if(session!=null) session.getTransaction().rollback();
			}finally{
				if(session!=null) HibernateUtil.close(session);
			}
	 }
	 @Test
	 public void testLoad(){
		 Session session=null;
			try {
				session = HibernateUtil.openSession();
				session.beginTransaction();
				Message message=(Message)session.load(Message.class, 1);
                System.out.println(message.getContent());				
			    for(Comment c:message.getComments()){
			    	System.out.println(c.getContent());
			    }
				
				session.getTransaction().commit();
			} catch (Exception e) {
				e.printStackTrace();
				if(session!=null) session.getTransaction().rollback();
			}finally{
				if(session!=null) HibernateUtil.close(session);
			}
	 }
	 //特别注意:OneToMany在添加和维护关系时比较麻烦,所以在开发中不建议使用OneToMany的单向
	 @Test
	 public void testLoad2(){
		 Session session=null;
			try {
				session = HibernateUtil.openSession();
				session.beginTransaction();
				Message message=(Message)session.load(Message.class, 1);
                
				System.out.println(message.getComments().size());				
			    // OneToMany 在不使用特别标签时,
				//Hibernate: select message0_.id as id4_0_, message0_.title as title4_0_, message0_.content as content4_0_ from t_message message0_ where message0_.id=?
				//Hibernate: select comments0_.mid as mid4_1_, comments0_.id as id5_1_, comments0_.id as id5_0_, comments0_.content as content5_0_ from t_comment comments0_ where comments0_.mid=?
					
				//  OneToMany 在使用<set name="comments"  lazy="extra">时    当返回结果是数字会使用count,否则使用投影  (智能一点)
				//Hibernate: select message0_.id as id4_0_, message0_.title as title4_0_, message0_.content as content4_0_ from t_message message0_ where message0_.id=?
			    //Hibernate: select count(id) from t_comment where mid =?
				
				
				session.getTransaction().commit();
			} catch (Exception e) {
				e.printStackTrace();
				if(session!=null) session.getTransaction().rollback();
			}finally{
				if(session!=null) HibernateUtil.close(session);
			}
	 }
}

 

 

分享到:
评论

相关推荐

    hiberante annotations reference_cn

    - `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 描述实体间的一对多、多对一、一对一和多对多关系。 - `@JoinColumn`: 在关联关系中定义外键列。 - `@Temporal`: 用于日期和时间类型的字段,指定其...

    Hibernate双向一对一关联映射(XML版)

    在这个“Hibernate双向一对一关联映射(XML版)”的主题中,我们将深入探讨如何通过XML配置文件实现两个实体之间的一对一关系。 首先,我们需要理解一对一关联的概念。在数据库中,一对一关联意味着两个表中的每一...

    struts2_hiberante_spring

    具体到这个"SSH整合架包jar",它可能包含了这三个框架的库文件,以及一些整合所需的配置文件,比如struts.xml、hibernate.cfg.xml和spring-context.xml。开发者在项目中引入这个jar包,就可以快速搭建一个支持SSH...

    hiberante - one to many - update

    2. **懒加载和立即加载**:默认情况下,`@OneToMany`关系可能是懒加载的,意味着关联的数据不会在加载主实体时立即加载,除非显式调用。如果希望在加载主实体时就获取关联数据,可以设置`fetch = FetchType.EAGER`。...

    hiberante3 注解帮助文档

    hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档

    Struts2 Spring2.5 Hiberante3.3.2 +ExtJS(Struts2-json)做的CRUD

    在这个DEMO中,Spring2.5.6采用了Annotation注解的方式,使得代码更加简洁,无需XML配置文件,只需在类或方法上添加注解,就可以声明bean和其依赖。Spring还提供了事务管理、AOP(面向切面编程)等功能,增强了应用...

    hiberante 源码 配置资料

    1. hibernate.cfg.xml:这是Hibernate的主要配置文件,包含了数据库连接信息、缓存设置、实体类映射等。例如,`&lt;session-factory&gt;`标签内的`&lt;property&gt;`元素用于设置属性,如`hibernate.connection.url`指定数据库...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

    Hiberante3相关文档

    立即加载(Eager Loading)则是在查询时同时加载关联的对象。批量加载(Bulk Loading)如批处理更新和删除,可以减少数据库交互次数,提高效率。此外,还有集合的分页加载和按需加载等策略。 总结起来,这个压缩包...

    最新springboot2hiberante5项目

    最新springboot2基础hiberante5完整项目,打包jar,运行jsp,包括后台与前台,拦截器,登录,后台下载就可以使用,注意不是jpa,里面有完整Dao,千万级数据项目分离的代码,为了适合老项目开发特意集成hiberante5....

    Hiberante3.jar + API

    四、API详解 1. Configuration类:负责读取配置文件,创建SessionFactory实例。例如: ```java Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); ``` 2. ...

    DAO层中对Hiberante

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它允许开发者将数据库操作转化为对Java对象的操作。DAO(Data Access Object)层是软件设计模式中的一个重要概念,主要用于处理数据访问...

    spring+mvc+hiberante

    在 XML 配置文件中,我们可以声明 Spring MVC 的 DispatcherServlet,它是整个 Web 应用的入口点,负责接收请求并分发到相应的处理器。同时,我们还需要配置 ViewResolver,它解析视图,例如 JSP 页面。 接下来,...

    hiberante5.0.7安装jar包

    **四、实体类与映射** 在Hibernate中,每个数据库表对应一个Java实体类。通过注解@Entity声明实体类,@Table指定对应的数据库表,@Id标注主键字段,@Column描述其他字段。例如: ```java @Entity @Table(name = ...

    Hiberante 有关jar包

    Hibernate Tools是一套全新而且完整的面向Hibernate3的工具集合,它包含了Eclipse插件和Ant编译流程。Hibernate Tools是JBoss Tools的核心组件,所以他也是JBoss Developer Studio的一部分

    hiberante annotations reference.pdf

    根据提供的文件信息,“hiberante annotations reference.pdf”主要介绍了Hibernate框架中的注解使用方法与参考。下面将基于标题、描述及部分文档内容进行详细的解析。 ### Hibernate注解概述 Hibernate是一个开源...

    hiberante5基础讲义

    同时,通过@ManyToOne、@OneToMany等关系注解来处理对象间的关联。映射文件(.hbm.xml)是另一种映射方式,虽然在注解方式流行后使用较少,但依然有价值,因为它提供了更细粒度的控制。 三、会话工厂与会话 会话...

    Struts+Hiberante+Sprint 框架整合

    开发工具:MyEclipse 6....Struts+Spring+Hiberante框架整合的简单登录系统 无需配置任何文件、只需在mysql中创建一个空数据库 如:create database test; 注:mysql数据库用户名:root 密码:root

    springmvc hiberante

    需要配置日志框架的配置文件,如log4j.properties或logback.xml,指定日志级别、输出格式和目的地。 5. 数据源和SessionFactory配置:为了使用Hibernate,需要配置数据源(DataSource)和SessionFactory。数据源...

    hiberante4.2.3-part01

    4. **级联操作**:通过`@OneToMany`、`@ManyToOne`和`@ManyToMany`注解,我们可以定义实体之间的关联,并使用`cascade`属性来控制关联的级联操作,如保存、删除等。 5. **缓存机制**:Hibernate支持一级缓存...

Global site tag (gtag.js) - Google Analytics