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