当前位置:编程学习 > JAVA >>

一对多中,多方不会加载,取不到多方的值

--------------------编程问答-------------------- 再创建一个新实例,就可以正常取得了,这是为什么呢? 
-----------------------------------------------------------------
能说明下这个是什么意思吗?

System.out.println("***********课程表->"+teacher.getCourseSet());//这儿出问题,是空的

你这里打印的是内存中你定义的teacher对象,从这个对象中取值是取不到的,因为你只为它设置了name,和数据库没有什么关系,如果你想teacher.geCourseSet中能获到值,请从数据库中查询teacher信息再取值就OK了,但是我不明白 再创建一个实例就行了是什么意思? 能描述清楚点吗? --------------------编程问答--------------------
引用 1 楼 ayong95 的回复:
再创建一个新实例,就可以正常取得了,这是为什么呢? 
-----------------------------------------------------------------
能说明下这个是什么意思吗?

System.out.println("***********课程表->"+teacher.getCourseSet());//这儿出问题,是空的

你这里打印的是内存中你定义的teacher对象,从这个对象中取值是取不到的,因为你只为它设置了name,和数据库没有什么关系,如果你想teacher.geCourseSet中能获到值,请从数据库中查询teacher信息再取值就OK了,但是我不明白 再创建一个实例就行了是什么意思? 能描述清楚点吗?


1,为什么只设置的name就不行?!当然可以只设置name了,ID是自增长的嘛。
在this.teacherManager.save(teahher)后面,就可以打新的ID打印出来。
System.out.println("***********老师的ID->"+teacher.getId());//这会打印出新增老师的ID。

2,新创建实体就是用上面获得的ID,new一个老师。
Teacher teacher2 = this.teacherManager.findById(id);
teacher2.getCourseSet();//这儿就有值。
--------------------编程问答-------------------- 按理说coureSet是teacher的一个属性,既然对这个属性有设值,应该就可以get出现。
为什么呢? --------------------编程问答-------------------- 还是两种情况hibernate执行的sql比较一下异同吧 --------------------编程问答-------------------- 楼主的Course 对象确定保存成功了吗
里面有没有Teacher 对象的ID呢 --------------------编程问答--------------------
引用 5 楼 yisshengyouni 的回复:
楼主的Course 对象确定保存成功了吗
里面有没有Teacher 对象的ID呢


可能是和事务有关 --------------------编程问答-------------------- 感觉可能是Hibernate的缓存原因吧,你保存的时候并没有commit,值只是存在了缓存中,并没有持久化到数据库中,取值的时候访问数据库当然是空。对Hibernate缓存没仔细学过,我也是乱讲的。 --------------------编程问答-------------------- 1.内存中的teacher (第一个)只是游离态对象,没有与数据库同步
2. 当你再次查询时 Teacher teacher2 = this.teacherManager.findById(id);, teacher中集合对象从数据库中从新更新,所以你拿到了。 --------------------编程问答--------------------
引用 8 楼 wolfofshaolin 的回复:
1.内存中的teacher (第一个)只是游离态对象,没有与数据库同步
2. 当你再次查询时 Teacher teacher2 = this.teacherManager.findById(id);, teacher中集合对象从数据库中从新更新,所以你拿到了。

save方法没有持久化关联关系,反而findById可以,这个于理不合 --------------------编程问答-------------------- Teacher teacher = new Teacher();
teacher.setName(teacherName);
this.teacherManager.save(teahher);
这个是把teacher对象进行持久化

下面几个语句也是类似,但是问题就在Course 对象在持久化后,teacher对象没有级联变化?
楼主看下按下面的语句操作下,看看打印出来是什么结果?


Teacher teacher = new Teacher();
teacher.setName(teacherName);
 
Course c1 = new Course();
c1.setTeacher(teacher);
c1.set(courseName1);
this.courseMange.save(c1);
 
teacher.getCourseSet());//看看这个会不会有值?
 

--------------------编程问答--------------------
 Teacher teacher = new Teacher();
teacher.setName(teacherName);
  
Course c1 = new Course();
c1.setTeacher(teacher);
c1.set(courseName1);
sesion.save(c1);    //teacher , course 同在持久化状态,游离态下,你如何同步teacher对象??
  
teacher.getCourseSet());

将Teacher 的 course 属性 inverse=true. 即将主控方转为course, 应该可以。楼主可以试下。
但前提还是要在sesion范围。不能是游离状态。 --------------------编程问答-------------------- 将Teacher 的 course 属性 inverse=true. 即将主控方转为course, 应该可以。楼主可以试下。
 但前提还是要在sesion范围。不能是游离状态。  --------------------编程问答-------------------- 一对多的配置对嘛?把配置文件也发出来看看呗 --------------------编程问答--------------------


<set name="course"  Inverse="true"  >   
    <key column="TEACHER_ID"/>   
    <one-to-many/>   
   </set>  
--------------------编程问答--------------------
引用 5 楼 yisshengyouni 的回复:
楼主的Course 对象确定保存成功了吗
里面有没有Teacher 对象的ID呢


c1,c2已经成功保存到数据库,而且有teacher的id --------------------编程问答--------------------
引用 7 楼 m443062375 的回复:
感觉可能是Hibernate的缓存原因吧,你保存的时候并没有commit,值只是存在了缓存中,并没有持久化到数据库中,取值的时候访问数据库当然是空。对Hibernate缓存没仔细学过,我也是乱讲的。


数据库不空。 --------------------编程问答--------------------
引用 10 楼 ayong95 的回复:
Teacher teacher = new Teacher();
teacher.setName(teacherName);
this.teacherManager.save(teahher);
这个是把teacher对象进行持久化

下面几个语句也是类似,但是问题就在Course 对象在持久化后,teacher对象没有级联变化?
楼主看下按下面的语句操作下,看看打印出来是什么结果?


Teacher teacher = new Teacher();
teacher.setName(teacherName);
 
Course c1 = new Course();
c1.setTeacher(teacher);
c1.set(courseName1);
this.courseMange.save(c1);
 
teacher.getCourseSet());//看看这个会不会有值?
 


不行,提示空的teahcer id,保存c1异常。 --------------------编程问答-------------------- this.courseMange.save(c1);
把这个方法改下,这个save先保存teacher再保存course,但是要保证两个保存是同一个事务中,同一个session实例,然后再试下结果。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,