微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

休眠中的嵌套映射

如何解决休眠中的嵌套映射

我有用户、报告和反馈类,我想一次获取所有三个表数据,但我没有得到反馈类数据。这是正确的方法还是有其他方法可以做到?

用户.java

@Entity
@Table(name = "user")
public class User {

    @Id
    @Column(name = "user_id")
    private int id;

    //other variables

    @OnetoOne(mappedBy = "user",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    private Profile profile;

    @OnetoMany(mappedBy = "user",fetch = FetchType.EAGER)
    private List<Report> result;
}

报告.java

@Entity
@Table(name = "report")
public class Report {

    @Id
    private int id;

    @JsonIgnore
    @ManyToOne(cascade = {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id",insertable = false,updatable = false)
    private User user;

    @OnetoOne(mappedBy = "report",fetch = FetchType.EAGER)
    private Feedback Feedback;
}

反馈.java

 @Entity
 @Table(name="Feedback")
    public class Feedback {
    
        @Id
        private int id;
        private int user_id;
        private int report_id;
    
        @JsonIgnore
        @OnetoOne(cascade = {CascadeType.MERGE,CascadeType.DETACH,fetch = FetchType.LAZY)
        @JoinColumn(name="report_id")
        private Report report;
}

控制器.java

  @RequestMapping("/all/report")
    public @ResponseBody
    List<User> showReport() {
        List<User> userList=userDAO.findAll();
        return userList;
    }

这是清单。

{
    "id": 290,"profile": {
     //profile data
    },"result": [
      {
        //result data
      }
    ]

解决方法

您应该为此目的使用 JPQL 查询,如下所示:

@Query("select distinct u from User u join fetch u.result r join fetch r.feedback")
List<User> fetchAllUsersWithReportsAndFeedback();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。