【发布时间】:2013-12-12 19:49:17
【问题描述】:
我有一个简单的数据模型,其中包含 3 个元素,Principal(用户),然后是他的设置和配置文件数据。 UserSetting 和 UserProfile 引用了 Principal,但 Principal 没有引用(单向)。
UserProfile ----> Principal <---- UserSettings
以下是实体(仅显示与问题相关的字段):
@Entity
public class Principal {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private boolean enabled;
}
@Entity
public class UserProfile {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch = FetchType.LAZY)
private Principal principal;
}
@Entity
public class UserSettings{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch = FetchType.LAZY)
private Principal principal;
private boolean isHidden;
}
这是一个连接表并提取所有正确数据的有效 JPA 查询:
@Query( "SELECT DISTINCT(userProfile) " +
"FROM UserProfile userProfile " +
"LEFT JOIN FETCH userProfile.principal AS principal " +
"WHERE principal.enabled = :enabled " +
"AND principal.id IN ( " +
"SELECT userSettings.principal.id " +
"FROM UserSettings userSettings " +
"WHERE userSettings.isHidden = :hidden)")
有没有办法创建 JPA 规范来执行以下操作(请记住 Principal 没有对 UserSettings 或 UserProfile 的引用):
a) 过滤掉未启用主体的用户配置文件
WHERE principal.enabled = :enabled
b) 过滤掉那些通过用户设置选择隐藏的用户配置文件
AND principal.id IN (
SELECT userSettings.principal.id
FROM UserSettings userSettings
WHERE userSettings.isHidden = :hidden
)
【问题讨论】:
标签: java hibernate jpa spring-data spring-data-jpa