如何使用hibernate组合@manytomany关联上的高效查询?

0g0grzrc  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(438)

我有两个实体和一个 ManyToMany 他们之间的联系- FeedbackApp & FeedbackAppProfile 他们每个人都有一个 tenant-id fk to Tenant 实体。
反馈应用实体:

public class FeedbackApp {

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

    @ManyToOne
    @JoinColumn(name = "tenant_id")
    private Tenant tenant;

    /*
        Marked as the owner side.
     */
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "feedbackApp_profile_mapping",
            joinColumns = @JoinColumn(name = "feedbackApp_id"),
            inverseJoinColumns = @JoinColumn(name = "profile_id"))
    Set<FeedbackProfile> profiles;
}

反馈配置文件实体:

public class FeedbackProfile {

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

    @ManyToOne
    @JoinColumn(name = "tenant_id")
    private Tenant tenant;

    @ManyToMany(mappedBy = "profiles", fetch = FetchType.EAGER)
    Set<FeedbackApp> feedbackApps;
}

这个 feedbackApp_profile_mapping 联接表有2列,如下所示:

我的问题:我需要创建一个查询,以获取特定反馈配置文件和租户id的所有反馈应用程序。是否可以使用hibernate/jpa获取它,或者我必须手动查询我的联接表?

8ehkhllq

8ehkhllq1#

让jpa来考虑要生成的最佳sql查询。您的jpa/标准/规范查询应该是 select fp.feedbackApps from FeedbackProfile fp LEFT JOIN FETCH fp.feedbackApps where fp.id=:feedback_profile_id and fp.tenant.id=:tenant_id 既然你问的是效率,最好把它去掉 fetch = FetchType.EAGER 从两个多对多Map和使用 join fetch 或命名实体图,仅在需要时进行连接。

相关问题