Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 如何在Spring Boot JPA中为OneToMany中的子对象获取空值_Java_Spring Boot_Jpa_Hibernate Onetomany_Spring Repositories - Fatal编程技术网

Java 如何在Spring Boot JPA中为OneToMany中的子对象获取空值

Java 如何在Spring Boot JPA中为OneToMany中的子对象获取空值,java,spring-boot,jpa,hibernate-onetomany,spring-repositories,Java,Spring Boot,Jpa,Hibernate Onetomany,Spring Repositories,我需要为child获取具有空值的父对象的简单列表。 但当我使用findAll()方法,然后尝试获取子对象时,我得到 LazyInitializationException:未能延迟初始化角色的集合:。。。无法初始化代理-没有会话 我看到了这个问题的解释(关于Lazy/Eager、JOIN-FETCH),但我需要为子对象获取null,而不必查询child @Entity public class Parent { @Id @GeneratedValue(strategy = Ge

我需要为child获取具有空值的父对象的简单列表。 但当我使用findAll()方法,然后尝试获取子对象时,我得到 LazyInitializationException:未能延迟初始化角色的集合:。。。无法初始化代理-没有会话 我看到了这个问题的解释(关于Lazy/Eager、JOIN-FETCH),但我需要为子对象获取null,而不必查询child

@Entity
public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "parent")
    Set<Child> childs;

@Entity
public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    Parent parent;

@Service
    public class ParentService {

    @Autowired
    ParentRepository parentRepository;

    public List<Course> getParentList() {
        return parentRepository.findAll();
    }
在测试之前,我在数据库中添加了几个父实体,结果不是空的,在这个测试中,我得到了错误LazyInitializationException

@Test
    public void checkParentListFormat() {
        List<Parent> parentList = parentService.getParentList();
        Assertions.assertThat(parentList.get(0).getChilds()).isNull();
    }


@测试
public void checkParentListFormat(){
List parentList=parentService.getParentList();
Assertions.assertThat(parentList.get(0.getChilds()).isNull();
}

我读过关于DTO的文章,但是有可能得到带有空值的简单实体吗?谢谢

我认为您需要将惰性初始化放在父注释中

@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
Set<Child> childs;
@OneToMany(mappedBy=“parent”,fetch=FetchType.LAZY)
设置孩子;

我认为您需要将惰性初始化放在父注释中

@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
Set<Child> childs;
@OneToMany(mappedBy=“parent”,fetch=FetchType.LAZY)
设置孩子;

是的,我试过,但情况没有改变。对于oneToMany,默认的获取类型为Lazy,直接设置为Lazy时,不会发生任何更改。我看到了类似的问题,似乎若对象有子对象,那个么若并没有不同的对象(DTO),就无法得到它们。例如,我需要ParentDTO对象只包含parentId字段。在这种情况下,我将得到我所需要的。因此,我需要获取所有的child或使用我需要的字段创建不同的对象(DTO)并获得这个对象。如果有人知道如何停止hibernate,请尝试在选定的查询中获取子对象,这将非常棒。现在我将使用DTO。是的,我尝试过这个,但情况没有改变。对于oneToMany,默认的获取类型为Lazy,直接设置为Lazy时,不会发生任何更改。我看到了类似的问题,似乎若对象有子对象,那个么若并没有不同的对象(DTO),就无法得到它们。例如,我需要ParentDTO对象只包含parentId字段。在这种情况下,我将得到我所需要的。因此,我需要获取所有的child或使用我需要的字段创建不同的对象(DTO)并获得这个对象。如果有人知道如何停止hibernate,请尝试在选定的查询中获取子对象,这将非常棒。现在我将使用DTO。