0 0

Hibernate多对一的取值问题10

有 Stream.clss 与 Vip.class 两个类分别对应数据库中两个表如下:


  //.....Stream.class.....
  public class Stream {
    private int id;
    private String title;
    private Vip vip;

    .....
    
    public Vip getVip() {
        return vip;
    }

    public void setVip(Vip vip) {
        this.vip = vip;
    }

}

  // .....Vip.class.....
public class Vip {
    private int uid;
    private String name;
   
    .....getter...setter......

}



  //.....Stream.class(多)的映射关系............
 <class name="Stream" table="streams">
    <id name="id" type="java.lang.Integer">
      <column name="id"/>
      <generator class="identity"/>
    </id>
    <property name="title" type="java.lang.String">
      <column name="title"/>
    </property>
    
    <property name="uid" type="java.lang.Integer">
      <column name="uid"/>
    </property>
  
    <many-to-one name="vip" 
                  column="uid" 
                  class="Vip"  
                  cascade="none"
                  outer-join="true"
                  insert ="false"
                  update ="false" />  
.....


 // .....Vip.class(一)的映射关系............
 <class name="Vip" table="vip">
    <id name="uid" type="java.lang.Integer">
      <column name="uid"/>
      <generator class="identity"/>
    </id>
    <property name="name" type="java.lang.String">
      <column name="name"/>
    </property>
.....


处理的程序为:
 // ....处理程序Execution.class......

       query = session.createQuery("from .....");
       query.setFirstResult(0);
       query.setMaxResults(20);
       List<Stream> list = query.list();
  ....

到现在全部运行正常,之所以Stream映射表的时候的uid属性重复定义是为了以后更新Stream表方便,在程序Execution中用
  for(Stream s : list)
       {
             System.out.println(s.getVip().getName());
       }

可以输出全部正确的值。

输出到jsp的时候遇到问题了:
如果不在Execution.class中执行System.out.println(s.getVip().getName());这一句话,在jsp页面迭代输出的时候
    <s:iterator id="rl" value="resultList">
     
         <s:property value="#rl.title" />
         <s:property value="#rl.vip.name" />
   
     </s:iterator>

<s:property value="#rl.vip.name" />这里就获取不到任何值,是空的,如果在Execution.class中执行s.getVip().getName()这句jsp页面就可以正常输出值。

百思不得其解,如何解决这个问题,怎么引起的这个问题?

拜谢。
问题补充
一天了还没找到解决方法
问题补充
是不是因为没设置lazy的原因呢
问题补充
yxb1990 写道
OpenSessionInViewFilter 设置了没?

原因找到了,在many-to-one 的时候没有设置lazy= “false” 这样查询的时候会才不会懒加载,一次性的把所以结果都返回了,这次错误的根源就是对hibernate的基础掌握的太垃圾了。。。。
问题补充
java_user 写道
还是不要用hibernate的对应关系了,那样只会使系统数据量停留在毕业设计的水平

不用对应关系,如果要获得关联表中的数据就得自己手动查询一遍,如果不手动查询还有更好的方法吗?
2012年5月21日 15:11

10个答案 按时间排序 按投票排序

0 0

    <s:iterator id="rl" value="resultList">
    
         <s:property value="#rl.title" />
         <s:property value="#rl.vip.name" />
  
     </s:iterator>这个 有错误吧   表达式 貌似用错了。  value 中 有值吗 ,这样写的话 应该 resultlist 中的值在值栈中。如果不是在值栈中 要用 value=“#request.   resultlist” 吧  。应该是这个问题。

2012年5月31日 09:34
0 0

我不同意“还是不要用hibernate的对应关系了,那样只会使系统数据量停留在毕业设计的水平”这句话,其实hibernate优化是很值得研究的,系统数据量也是根据实际情况去考虑,不能简简单单的任务越少越好。

2012年5月25日 23:01
0 0

一般一对多,多对一就直接上sql了,感觉还是sql来的直观

2012年5月25日 15:48
0 0

不知楼主有没有用spring的OpenSessionInViewFilter
在web.xml中配下

<filter>
		<filter-name>OpenSessionInViewFilterfilter-name</filter-name>
		<filter-class>
			org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
		</filter-class>
		<init-param>
			<description>
			</description>
			<param-name>sessionFactoryBeanName</param-name>
			<param-value>orchardSessionFactory</param-value>
		</init-param>	
	  	<init-param> 			
		    <param-name>flushMode</param-name> 
  			<param-value>AUTO</param-value>         
       	</init-param> 		
	</filter>

2012年5月22日 16:47
0 0

楼主我最近也碰到这样的问题有没有找到更好的解决办法啊

2012年5月21日 15:11
0 0

还是不要用hibernate的对应关系了,那样只会使系统数据量停留在毕业设计的水平

2012年5月21日 15:11
0 0

我想也应该是 lazy 的原因

2012年5月21日 15:11
0 0

改用jpa吧. 标准点

2012年5月21日 15:11
0 0

老师说  多对一可以看成一对多

2012年5月21日 15:11
0 0

OpenSessionInViewFilter 设置了没?

2012年5月21日 15:11

相关推荐

    让hibernate输出sql语句参数配置.doc

    hibernate.max_fetch_depth 参数用于设置单向关联(一对一,多对一)的外连接抓取(outer join fetch)树的最大深度。其取值为 0 到 3 之间,建议取值为 1 或 2。 8. hibernate.default_batch_fetch_size ...

    Hibernate 参数配置详解

    通过对 Hibernate 配置参数的详细介绍,我们不仅了解了如何优化 Hibernate 的运行效率,还学会了如何根据实际需求调整各种配置以适应不同的开发场景。例如,通过设置合适的 `hibernate.max_fetch_depth` 和 `...

    Hibernate可选配置大全

    #### 一、Hibernate配置项概览 Hibernate作为一款优秀的Java持久层框架,提供了丰富的配置选项,以适应不同场景下的需求。本文档将详细解析Hibernate的各种可选配置,帮助开发者深入了解并合理利用这些配置,提升...

    hibernate

    以`School`和`Address`为例,假设我们有一个多对多的关系,在这种情况下,`inverse`属性可以用来指定由哪一方来维护这个关联关系。 ```java // School类 @ManyToMany(mappedBy = "schools") private Set&lt;Address&gt; ...

    hibernate[1].cfg.xml中配置信息详解

    为了确保Hibernate能够正确地工作,我们需要在`hibernate.cfg.xml`文件中进行一系列的配置。本文将详细介绍`hibernate.cfg.xml`中各个配置项的意义及其可能的取值,帮助开发者更好地理解和应用这些配置。 #### 二、...

    Hibernate通过配置文件自动生成表

    其中,`hibernate.hbm2ddl.auto`属性决定了Hibernate对数据库表的操作。常见的取值有: - `create`:每次启动应用时,都会删除旧表并重新创建新表,适合开发阶段。 - `update`:只更新已有表结构,不会删除表,适用...

    Hibernate 面试题

    6. **多对一/一对多关系设计**:设计User类,Card类(会员卡)和Email类,User与Card和Email为一对多关系。这种设计允许User有多个Card和Email实例,方便扩展。 7. **主键设计的优劣**:将身份证号码作为主键可能...

    hibernate主键生成策略

    在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的正确选择对系统的稳定性和可扩展性有直接影响。 1. **assigned**策略: 这种策略要求开发者在调用`save()`方法之前手动设置主...

    hibernate主键生成策略详解

    值得注意的是,该方法被声明为 synchronized,这意味着在同一 JVM 内部可以确保线程安全,但在多 JVM 并发访问同一数据库时,则可能出现主键冲突的问题,尤其是在插入操作频繁发生的场景下。因此,这种策略更适合...

    hibernate.cfg.xml中配置信息详解

    该文件中包含了多个配置属性,用于控制 Hibernate 的各种功能和特性。本文将对 Hibernate.cfg.xml 中的配置信息进行详细的解释和分析。 hibernate.dialect Hibernate.dialect 属性用于指定 Hibernate 的数据库 ...

    Hibernate表间关联ppt课件.ppt

    本课件主要讲解了Hibernate中不同类型的表间关联,包括一对一、一对多、多对多的映射方式以及主键生成策略。 1. 主键生成策略: - `assigned`:由用户手动指定主键值。 - `increment`:由Hibernate内部递增,适用...

    Hibernate配置

    - **作用**:控制Hibernate在查询时对外键关联的数据进行抓取的程度,提高查询效率。 ##### 8. **hibernate.default_batch_fetch_size** - **用途**:设置默认的批量抓取大小。 - **取值**:推荐值为4、8或16。 ...

    Hibernate面试答案,准备的充足才能胜利

    6. **多对一/一对多关系设计**: 设计User、Card和Email类,User与Card和Email是多对一关系。User类包含Card和Email集合属性,Card和Email类则包含User引用。 7. **主键设计的优劣**: 身份证作为主键的缺点是...

    Hibernate 课件_配置文件详解

    通常情况下,推荐使用`hibernate.cfg.xml`,因为它提供了更多的配置选项和更好的可读性。 ##### `hibernate.cfg.xml`常用属性 - **`connection.url`**:用于指定数据库的URL。 - **`connection.username`**:数据库...

    课程指标要求-Hibernate技术.doc

    9. 熟悉配置一对一、一对多、多对一等关联关系的方法。 10. 了解如何在Java域模型中表示数据库的主键参考关系。 11. 实现数据库中表间主外键的参考关系。 12. 理解Session缓存的作用,配置第二级缓存。 13. 明白事务...

    hibernate面试题

    选项C正确,一对多关系可以用Set、List或Map映射,而多对一关系通常用Set映射。 14. **SessionFactory** 选项C正确,SessionFactory是重量级对象,不应频繁创建。一个SessionFactory对应一个数据库源。 15. **...

    hibernate 详细配置

    【hibernate 详细配置】是指在Java应用中配置Hibernate框架的过程,这涉及到一系列的属性设置,以便让Hibernate能够与特定的关系数据库进行有效交互并优化性能。以下是对这些配置属性的详细说明: **1. hibernate....

    Hibernate主键生成策略.docx

    主键是表中的一个或多个字段组合,用于唯一标识表中的每一条记录。Hibernate 支持多种主键生成策略,包括 `assigned`、`increment`、`hilo` 和 `seqhilo` 等,这些策略具有不同的特性和适用场景。 #### 二、主键...

    java基本数据类型字节大小 hibernate运行原理

    ### Java基本数据类型及其字节大小 在Java编程语言中,基本数据类型是构建更...同时,Hibernate作为一款强大的ORM框架,不仅简化了数据库操作,还提高了开发效率和代码的可维护性,是Java开发者不可或缺的工具之一。

    Hibernate注解.docx

    在Java的持久化框架Hibernate中,注解的使用极大地简化了对象关系映射的过程,使得开发者无需编写XML映射文件,就能实现类与数据库表之间的映射。Hibernate不仅支持Java Persistence API (JPA)的标准注解,还针对JPA...

Global site tag (gtag.js) - Google Analytics