Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中将重新加载的对象链接到其父对象_Java_Hibernate_Lazy Loading - Fatal编程技术网

Java 在Hibernate中将重新加载的对象链接到其父对象

Java 在Hibernate中将重新加载的对象链接到其父对象,java,hibernate,lazy-loading,Java,Hibernate,Lazy Loading,我在Hibernate/J2EE中遇到了延迟初始化问题。我有一个对象猫,它包含一个对象项圈,它包含一个字符串地址。衣领和地址处于延迟加载状态 我正在处理我的对象Cat,它已经从我的数据库中加载(因此我的会话已关闭)。 我的猫确实包含我的项圈,但我可以访问我的地址(延迟加载例外) 所以我的想法是重新装填衣领以获得地址。它的作品,我做了这样的事情: Cat cat = animals.loadCat(id); //Here, cat contains collar, but collar doesn

我在Hibernate/J2EE中遇到了延迟初始化问题。我有一个对象猫,它包含一个对象项圈,它包含一个字符串地址。衣领和地址处于延迟加载状态

我正在处理我的对象Cat,它已经从我的数据库中加载(因此我的会话已关闭)。 我的猫确实包含我的项圈,但我可以访问我的地址(延迟加载例外)

所以我的想法是重新装填衣领以获得地址。它的作品,我做了这样的事情:

Cat cat = animals.loadCat(id);
//Here, cat contains collar, but collar doesn't contains address
Collar collar = animals.reload(collar);
//Here my collar does contain my address
collar.setAddress("new address");
如果我做一个

animals.update(cat); //(a method who call merge)
update(collar);
//Method update
public void update(Collar collar){
    em.merge(collar);
}
它不会更新地址,这似乎是合乎逻辑的

如果我做一个

animals.update(cat); //(a method who call merge)
update(collar);
//Method update
public void update(Collar collar){
    em.merge(collar);
}
它的工作和我的衣领和猫是更新的基础

public class Cat {
     @ManyToOne
     private Collar collar;
     ...
}
public class Collar {
    @OneToMany(cascade = {CascadeType.ALL})
    protected String address;
    ...
}
public Collar reload(Collar collar){
    return em.find(Collar.class, collar.getId());
}

我的问题是,如何将我的新项圈连接到我的猫,在动物更新(cat)之后做什么?

这样做:

    Cat cat = animals.loadCat(id);
    cat.getCollar().setAddress("new address");
    animals.update(cat);

@Thomas给出的解决方案:

Cat cat = animals.loadCat(id);
Collar collar = animals.reload(collar);
cat.setCollar(collar);
collar.setAddress("new address");
animals.update(cat);
我不知道这是否是最好的,但它是有效的,似乎合乎逻辑。
多亏了大家

Hi,你能展示一下你的update()方法吗?可能你没有设置Cascade选项。你是在加载后和更新前做了
cat.setCollar(collar)
还是
collar.setCat(cat)
?哪一方是拥有方?
update()。猫有项圈。所以我必须做一个猫。套领。是的,我想我们需要见你。注释或XML。在这种情况下,我在.setAddress(“新地址”)上有一个异常:未能延迟初始化角色com.project.anives.Collar.address的集合,没有会话或会话关闭。请显示错误消息和getCollar(),setAddress()?项圈不为空?动物。重新加载(项圈);它是做什么的?领子不是空的,但是地址YesAddress不能是空的,因为:。setAddress(“新地址”);你能指出你的错误吗?