Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 在实体对象上进行提交后检索子对象_Java_Hibernate_Jpa - Fatal编程技术网

Java 在实体对象上进行提交后检索子对象

Java 在实体对象上进行提交后检索子对象,java,hibernate,jpa,Java,Hibernate,Jpa,假设我检索的实体对象如下所示: @Entity public class Mother { ... @OneToMany(mappedBy = "mother", targetEntity = Child.class, fetch = FetchType.LAZY) public List<Child> getChildren() { return children; } }

假设我检索的实体对象如下所示:

@Entity
public class Mother {
    ...

    @OneToMany(mappedBy = "mother",
               targetEntity = Child.class,
               fetch = FetchType.LAZY)
    public List<Child> getChildren() {
        return children;
    }
}
@实体
公共阶级母亲{
...
@OneToMany(mappedBy=“母亲”,
targetEntity=Child.class,
fetch=FetchType.LAZY)
公共列表getChildren(){
返回儿童;
}
}
检索上述对象时,我提交事务(并关闭与该对象关联的会话)。在代码的后面,需要检索子级。如果我想保持fetch类型为LAZY,有没有一种方法可以使用母对象,并且仍然能够调用getChildren()来检索子对象?还是我必须咬紧牙关,通过母亲的钥匙询问孩子们

如果我想保持fetch类型为LAZY,有没有一种方法可以使用母对象,并且仍然能够调用getChildren()来检索子对象

如果
实体管理器
已关闭,则不会

还是我必须咬紧牙关,通过母亲的钥匙询问孩子们

您可以在使用FETCH JOIN获取母亲时检索孩子:

SELECT m
FROM Mother m LEFT JOIN FETCH m.children
WHERE m.id = :id
其他选择包括:

  • 使用“视图中打开实体管理器”模式(如果您使用的是webapp)
  • 使用扩展持久性上下文

这个“问题”让我在服务层中放了很多getChildrenFor(妈妈m)。感觉不对,但不确定该怎么办。@willcodejavaforfood:好吧,这取决于你的用例和应用程序的设计,但如果你只是为了避免延迟加载问题而添加它们,你就有点污染了你的业务层。我想是这样的。当我需要在GUI(Swing)中正常显示它时,我不想在视图模型中创建事务。也许我应该?:)FETCH-JOIN解决方案是,如果您希望总是要检索母亲的孩子,对吗?我想我的问题是,如果调用了commit,那么稍后可能会出现if语句,“then”,您决定需要检索子级。我想那你就只能在一个新的交易中查询子交易了。@digianie这一切都取决于你的“业务流程”,没有更多的细节,我就无法更精确了。但是,是的,fetch连接很有用,因为您知道需要关联。