Ich bin nur neu zu den Spring Data JPA und haben zwei Entitäten und folgten einige Beispiele aus stackoverflow, aber es gibt kein Glück.Spring Data JPA Spezifikation Manyto One realtionship
Benutzer ---> * TaxPayment
Das Ziel ist es, die alle taxpayments user_id mit Bezug zu bekommen:
User.java
public class User erweitert AbstractAuditingEntity implementiert Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
.......... }
TaxPayment.jva
public class TaxPayment implementiert 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;
}..
}
I OneToMany Annotation nicht aus User.java und die Spalte abgebildet in der Taxpayment als User_id wan't zu haben.
Spezifikation Klasse wie folgt:
final class 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);
}
};
}
}
Kann jemand diese Spezifikation überprüfen, wie pro mein Ziel richtig/falsch (zu allen TaxPayment verwandten zu erhalten. zu Benutzer-ID).
Danke in fortgeschrittenem. Nyamath