我有两个实体和一个 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获取它,或者我必须手动查询我的联接表?
1条答案
按热度按时间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
或命名实体图,仅在需要时进行连接。