Spring data jpa Spring数据JPA规范多对一关系
我刚刚接触Spring数据JPA,有两个实体,并遵循了stackoverflow的一些示例,但没有运气 用户--->*纳税 目标是获得与用户id相关的所有税款: User.java 公共类用户扩展AbstractAuditionEntity实现可序列化{Spring data jpa Spring数据JPA规范多对一关系,spring-data-jpa,Spring Data Jpa,我刚刚接触Spring数据JPA,有两个实体,并遵循了stackoverflow的一些示例,但没有运气 用户--->*纳税 目标是获得与用户id相关的所有税款: User.java 公共类用户扩展AbstractAuditionEntity实现可序列化{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
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;
}..
。。。。。。。。。。
}
TaxPayment.jva
公共类TaxPayment实现可序列化{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
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中的一个omany注释和Taxpayment中映射为User\u id的列
规格等级如下:
最终类纳税规范{
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);
}
};
}
private TaxPaymentSpecification(){
}
静态规范hasUser(长用户ID){
返回新规范(){
@凌驾
公共谓词toPredicate(根arg0,标准查询arg1,
标准生成器(arg2){
//TODO自动生成的方法存根
根=arg0;
Subquery subqry=arg1.Subquery(Long.class);
Root用户=subqry.from(user.class);
final Join taxpays=root.Join(“用户”);
subqry.select(taxpays.get(“用户id”));
其中(arg2.equal(user.get(“id”),userId));
返回arg2.in(arg0.get(“用户id”)).value(subqry);
}
};
}
}
任何人都可以根据我的目标检查此规范是否正确/错误。(以获取与用户id相关的所有税费)
提前谢谢。
Nyamath如果您已经知道用户id,则无需使用子查询,该用户id将是TaxPayment表中用户id的值:
@Override
public Predicate toPredicate(Root<TaxPayment> arg0, CriteriaQuery<?> arg1,
CriteriaBuilder arg2) {
return arg2.equal(arg0.get("user_id"), userId);
}
@覆盖
公共谓词toPredicate(根arg0,标准查询arg1,
标准生成器(arg2){
返回arg2.equal(arg0.get(“用户id”),userId);
}