0
我剛剛接觸Spring Data JPA,並且有兩個實體,並遵循了幾個來自stackoverflow的示例,但沒有運氣。彈簧數據JPA規範Manyto One realtionship
用戶---> * TaxPayment
我們的目標是讓所有user_id說明相關taxpayments:
User.java
公共類用戶擴展AbstractAuditingEntity實現Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
.......... }
TaxPayment.jva
公共類TaxPayment實現Serializable {
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;
}..
}
我不wan't有從User.java OneToMany註釋和在Taxpayment映射爲USER_ID的列。
規範類,如下所示:
final類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);
}
};
}
}
任何人都可以查看此規範是正確/錯誤按我的目標(讓所有的TaxPayment相關。到user_id)。
謝謝先進。 Nyamath