Hibernate的一对多映射的问题,集合的size不对。

问题描述

Parent和Children建立一对多的双向关联。Parent类的Children属性是Set类型的。数据库里面和parent关联的child记录是2条,这个确认过。但是parent.getChindren().size()的值是1。但是用HQL方式用相同的条件查询,"from Child c where c.parentId=" + parent.getId(),结果是2。我把parent.getChindren().size()时在控制台输出的sql语句复制出来替换掉问号,直接去查询数据库,结果也是2条记录。为什么直接输出size的值是1而其他方法查询的结果是2?我已经覆盖了对象的hashCode和equals方法了,我在hashCode和equals里添加了输出,发现hashCode执行了一遍,equals没有执行,是不是说在初始化children的时候只有1个对象被添加到set里? 应用里其他地方的一对多映射都正常,唯独这里有问题。Child不止和Parent有关联,还和其他的对象有同样的关联,那些就正常。<set name="children" cascade="none" inverse="true" lazy="true" sort="natural"> <key column="parentId" /> <one-to-many class="com.bean.Child" /></set><many-to-one name="Parent" column="parentId" class="com.bean.Parent" not-null="false" cascade="none" /> 问题补充:我实在Application里面做的试验,用的同一个session,还是这个问题。

解决方案

缓存问题。拿过来之前把session同步下再看看。

时间: 2024-10-21 17:36:45

Hibernate的一对多映射的问题,集合的size不对。的相关文章

【hibernate框架】几种集合映射

1.Set 前面我们已经用过,就不再说. 2.List Group.java: package cn.edu.hpu.listMapping; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persist

实体entity里面延迟加载的关联集合的size怎么比实际的要多1个呢?

问题描述 实体entity里面有个属性是关联的子节点list,设置了延迟加载.@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)@JoinColumn(name = "parent_id")@IndexColumn(name = "idx")为什么entity直接去get这个属性得到的.size()的大小比实际数据总要大1呢? 解决方案 为什么不for循环System.out.print

关于hibernate的实体类中有集合类型转化成JSON的工具类 - 怀念今天的专栏 - 博客频道

Json 来源:http://blog.csdn.net/zczzsq/article/details/18697045#1536434-hi-1-4387-42d97150898b1af15ddaae52f91f09c2

Hibernate之一级缓存和二级缓存

1:Hibernate的一级缓存: 1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率:(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据,如果有数据就不查询数据库,直接从缓存中获取数据):  1.2:Hibernate中的一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数,只在session范围内有效,session关闭,一级缓存失败: 1.3:一级缓存的特点,只在session范围有效,作用时间

hibernate查询是否使用了ehcache的缓存了?

问题描述 下面是测试代码:package org.abin.lee.test;import java.util.List;import junit.framework.TestCase;import org.abin.lee.entity.Department;import org.abin.lee.service.UserService;import org.junit.Before;import org.springframework.context.ApplicationContext;i

hibernate一对多查询问题

问题描述 hibernate一对多查询问题 我想用hibernate查询得到的list集合转化为json后是这种效果[{"分类id":"1","商品":[{"分类id":"1","name":".商品1"},{"分类id":"1","name":"商品2"}]},{"分类id&q

Java基础-15总结对象数组,集合Collection,集合List

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. (2)案例: 用数组存储5个学生对象,并遍历数组. package cn.itcast_01;

集合转换-如何把这个set转换程list集合 并且按照要求排序啊

问题描述 如何把这个set转换程list集合 并且按照要求排序啊 用hibernate时 实体用set集合来关联的时候 如何把这个set转换程list集合 并且按照要求排序啊.就比如:Student 有teacher属性, 在查出student的时候,teacher是set集合,怎样把他转换成list集合,同时可以按照要求排序(如:teacher有age属性,按age大小排序) 解决方案 Java 集合转换(数组.List.Set.Map相互转换)Java 集合转换(数组.List.Set.Ma

Java的Hibernate框架中集合类数据结构的映射编写教程_java

一.集合映射 1.集合小介集合映射也是基本的映射,但在开发过程中不会经常用到,所以不需要深刻了解,只需要理解基本的使用方法即可,等在开发过程中遇到了这种问题时能够查询到解决方法就可以了.对应集合映射它其实是指将java中的集合映射到对应的表中,是一种集合对象的映射,在java中有四种类型的集合,分别是Set.Map.List还有普通的数组,它们之间有很大的区别: (1)Set,不可以有重复的对象,对象是无序的: (2)List,可以与重复的对象,对象之间有顺序: (3)Map,它是键值成对出现的