hibernate级联修改之后接着查询时,查不出来?,用hibernate做的返回对象为null,求解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate级联修改之后接着查询时,查不出来?,用hibernate做的返回对象为null,求解相关的知识,希望对你有一定的参考价值。
用级联保存成功并可以查出来,修改后就不行了??(在线等,急!!)
应该是在级联修改的时候,保存到数据库的时候,那个关联的外键是空的了。应该是先把从表的值都赋值好B b = new B(),然后是把主表的值赋值好A a = new A(),最关键的是,把从表的属性设置到主表中(a.b = b)。就是主表A类中设置关联的从表B的值b,最后保存A到数据库中。(session.save(A)),如果级联的话,从表B也是可以跟着保存到数据中。最好是不用级联,就是先保存主表(一的那边),然后保存从表(多的那边)。A a = new A();
B b = new B();
b.a = a;
session.save(a);//先保存主表
session.save(b);//保存多的一边
不过要在配置文件中设置,在set中设置。inverse=true,追问
我用merge更新的,数据库表的数据改了,但接着查询时就查不到了,刚保存完时能查到
追答修改时是用级联修改两个表,查询时专门写了一个视图
既然数据库中数据改了,但是你写了一个视图来查询的,我想是不是这个有问题。
使用merge方法,如果数据库中有该记录,则更新该记录,如果不存在该记录,则进行insert操作。
使用update的话,会无条件执行update,
也就是说如果数据库中有该记录的话,merge和update是一样的,但是如果数据库中没有该记录,使用merge执行insert,不会报错,而使用update会报错。
我用视图查询的,视图中有数据啊
追答你想想,视图能修改?
追问修改时是用级联修改两个表,查询时专门写了一个视图
追答我看你是用merge更新的。merge和update不一样。update是把游离态的数据持久化到数据库。merge虽然效果和update一样,但是前后数据的状态还是一样的。session缓存里没有
本回答被提问者采纳Hibernate做级联查询时,懒加载的情况下会出现啥异常?
比如我有持久化类
public class A
private int aid;
private <Set>B bs;
public class B
private String bname;
省略了getter和setter
且在A的映射文件配置了B的懒加载
我调用A类对象
Iterator it=a.getBs().iterator();
while(it.hasNext())
B b=it.next();
System.out.println(b.getBname());
此时可能会出现什么异常?
一般会出现Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session......这个异常
懒加载概念::懒加载,运行后没有立刻访问相应的数据库,返回的是代理对象,永远不可能为空,当第一次使用该对象的时候,才去访问。
Hibernate的Lazy初始化1:n关系时,必须保证是在同一个Session内部使用这个关系集合,不然Hiernate将抛出异常。
这是延时加载的问题,把有关联的所有pojo类,在hibernate.cfg.xml文件中。一般在many-to-one中,set标签内中设lazy="false"
参考技术A lazy模式可以理解为,不用不查,用时再查。"再查"的时候必须保证session没有关闭,不然会查不出来,报空指针或输出空值。 参考技术B 我看到是没看出来什么异常 参考技术C 1111
以上是关于hibernate级联修改之后接着查询时,查不出来?,用hibernate做的返回对象为null,求解的主要内容,如果未能解决你的问题,请参考以下文章
hibernate查询时查不出数据但是数据库中数据存在。具体问题见补充。
Hibernate做级联查询时,懒加载的情况下会出现啥异常?