我是来自与其他实体具有多对一关系的实体的查询数据。使用规范只能获取根的记录。但我也需要从关系实体中获取列。
我是 Spring Boot 的新手,正在尝试构建 API。
查询根总是引用实体,那么如何使用规范中的自定义查询。
return new Specification<CallMessage>() {
private static final long serialVersionUID = 1L;
@Override
public Predicate toPredicate(Root<CallMessage> root,
CriteriaQuery<?> query, CriteriaBuilder cb)
{
List<Predicate> predicates = new ArrayList<>();
In<Long> inClause = cb.in(root.get("bed_address"));
inClause.value("XYZ");
predicates.add(inClause);
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
}
@Entity(name = "calls")
public class CallMessage implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@OneToMany(targetEntity = PresetModel.class, mappedBy = "id", orphanRemoval = false)
private Set<PresetModel> presetModels;
}
@Entity(name = "reports_preset_filter")
public class PresetModel extends AuditModel{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
private String preset_name;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name="call_id" ,nullable=false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private CallMessage callMessage ;
}
使用 JpaSpecificationExecutor 时不能使用另一个查询来连接这两个表。有任何方法可以获取记录,例如 call_message { id: 1, reports_preset_filter : [ ] }
我正在尝试使用多个谓词构建过滤器 API,在这里我已经修剪了谓词列表以及其他实体列。