gpt4 book ai didi

java - Spring Boot中的分页循环关联数据

转载 作者:行者123 更新时间:2023-11-30 02:05:59 27 4
gpt4 key购买 nike

嗨,我正在尝试在 Spring Boot 中实现分页。我有 3 张 table 。

1) 帖子 -> 将帖子存储为小推文。

2) 个人资料 -> 用户详细信息

3) 身份验证 -> 用户的身份验证表。

这3个表之间的关系如下。

 profile have OneToOne relation with Authentication.  
profile have OneToMany relation with Post.

authentication have OneToOne with Profile.

Post have OneToOne with Profile.

当我尝试对帖子表进行如下分页时

Post.java

 @Entity
public class Post {

@OneToOne(fetch = FetchType.LAZY)
private Profile profile;

@Override
public String toString() {
return "Post [id=" + id + ", tweet=" + tweet + ", profile=" + profile + "]";
}

PostRepository.Java

 @Repository
public interface PostRepository extends PagingAndSortingRepository<Post,Integer> {
Post findById(int id);
}

PersonPagingService.Java

 public interface PersonPagingService {

Page<Post> getAllPosts(Pageable pageable);

}

PostService.Java

@Service
public class PostService implements PersonPagingService {

@Autowired
private PostRepository postRepository;

@Override
public Page<Post> getAllPosts(Pageable pageable){
return postRepository.findAll(pageable);
}
}

PostController.Java'

@RestController
public class PostController{

@GetMapping("/test")
public List<Post> checkThesSignupEmailIsNew(Pageable pageable) {
Page<Post> posts = PersonPagingService.getAllPosts(pageable);
return posts.getContent();
}
}

当我发送请求时

enter image description here

原始数据

RAW DATA of response

如果我删除 POST.JAVA 中的关系,那么它工作正常。

请帮助我了解我犯了什么错误。

**不用担心身份验证数据,它是测试数据**

Profile.Java

@Entity
public class Profile {

@OneToMany(fetch=FetchType.LAZY, cascade= CascadeType.ALL, mappedBy = "profile")
List<Post> posts;

@Override
public String toString() {
return "Profile [id=" + id + ", name=" + name + ", email=" + email + ", location=" + location + "]";
}
}

它从数据库中获取一篇文章

[![one Post][3]][3]  

enter image description here

最佳答案

返回Entities来自您的Controllers这不是一个好主意。因为JSON序列化器如 Jackson将尝试将您的实体序列化为 JSON及其所有属性。由于您的对象是 Hibernate代理,这可能会导致一些问题。

您可能从数据库中获取了太多不需要的记录。

您可能会遇到LazyInitiailzatinException如果Hibernate尝试获取尚未获取但 Session 的惰性属性已关闭。

在双向关系的情况下,您将面临无限循环陷阱。

相反,最好有 ModelDTO为您提供类(class)Entities并转换您的 Entity反对 ModelDTO对象并设置您想要在这些对象的响应中的属性并返回它们。

关于java - Spring Boot中的分页循环关联数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com