【发布时间】:2017-08-19 01:07:11
【问题描述】:
我是 Spring Data JPA 的新手,有两个实体,并遵循了一些来自 stackoverflow 的示例,但没有运气。
用户--->* 纳税
目标是获取与user_id相关的所有税款:
用户.java
公共类用户扩展 AbstractAuditingEntity 实现可序列化 {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
....... }
TaxPayment.jva
公共类 TaxPayment 实现可序列化 {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "payment_date", nullable = false)
private LocalDate paymentDate;
@NotNull
@Column(name = "amount", precision=10, scale=2, nullable = false)
private BigDecimal amount;
@Column(name = "reference")
private String reference;
@ManyToOne
private User user;
public Long getId() {
return id;
}..
}
我不想让来自 User.java 的 oneTOMany 注释和在 Taxpayment 中映射为 user_id 的列。
规范类如下:
最终类 TaxPaymentSpecification {
private TaxPaymentSpecification(){
}
static Specification<TaxPayment> hasUser(Long userId){
return new Specification<TaxPayment>() {
@Override
public Predicate toPredicate(Root<TaxPayment> arg0, CriteriaQuery<?> arg1,
CriteriaBuilder arg2) {
// TODO Auto-generated method stub
Root<TaxPayment> root = arg0;
Subquery<Long> subqry = arg1.subquery(Long.class);
Root<User> user = subqry.from(User.class);
final Join<User,TaxPayment> taxpays = root.join("user");
subqry.select(taxpays.<Long> get("user_id"));
subqry.where(arg2.equal(user.<Long> get("id"),userId));
return arg2.in(arg0.get("user_id")).value(subqry);
}
};
}
}
任何人都可以根据我的目标查看此规范是否正确。(获取与 user_id 相关的所有 TaxPayment)。
提前致谢。 尼玛特
【问题讨论】:
标签: spring-data-jpa