如何解决如何在非主列上使用JPA规范创建查询
我有以下查询,其中两个表在非主列上连接。该表正在一个公共列上连接。
在实体中,我没有提供User和UserDetails之间的任何联接,也不想提供任何一个
SELECT * from User user,UserDetails ud
WHERE user.user_key = :pUserKey // passed in parameter
user.common_key = ud.common_key
用户
@Entity
@Table(name = "USER")
@Data
public class User implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "user_key",nullable = false)
@JsonIgnore
private Long userKey;
@Column(name = "common_key ",nullable = false)
@JsonIgnore
private Long commonKey;
}
用户详细信息
@Entity
@Table(name = "USER_DETAILS")
@Data
public class UserDetails implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "user_details_key",nullable = false)
@JsonIgnore
private Long userDetailsKey;
@Column(name = "common_key ",nullable = false)
@JsonIgnore
private Long commonKey;
}
如何在JPA规范中实现相同的查询
解决方法
我已经得到了预期的解决方案。我使用root
query.from()
下面是完整的解决方案
public static Specification<User> userAndDetails(Long userKey) {
return (Root<User> root,CriteriaQuery<?> query,CriteriaBuilder builder) -> {
Root<UserDetails> userDetailsRoot = query.from(UserDetails.class);
Predicate userAndDetailsJoin = builder.equal(
root.get(User_.commonKey),userDetailsRoot.get(UserDetails_.commonKey));
Predicate userKeyPredicate = builder.equal(root.get(User_.userKey),userKey);
return builder.and(userAndDetailsJoin,userKeyPredicate);
};
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。