我有两个实体:
public abstract class ElementMap {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne
@JoinColumn(name = "coordinate")
@JsonManagedReference
private Coordinate coordinate;
private String name;[...]
和
public class Coordinate {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private int x;
private int y;
@Column(name = "map_x")
private int mapX;
@Column(name = "map_y")
private int mapY;
@OneToOne(mappedBy = "coordinate")
@JsonBackReference
private ElementMap elementMap;[...]
在数据库中,我有许多元素(like this)来填充不同的行。
我想创建一个使用Coordinate对象的服务来进行高级搜索。
例如,如果我把:x = 3和map_y = 5,我想找到x = 3 AND map_y = 5的每一行。
如果我把:x = 3,map_y = 5和y = 6,我想找到x = 3 AND map_y = 5 AND y = 6的每一行。
使用Spring JPA,可以在ElementMapRepository接口中创建一些方法,如:
- findByCoordinateMapXAndCoordinateXAndCoordinateY
- findByCoordinateYAndCoordinateX
- findByCoordinateY
等等...
但是有很多界面可以创建来管理所有案例。
那么在Java Spring Boot和/或JPA中创建对象的高级搜索的最佳解决方案是什么?
我找到了一个很好的教程来回答我的问题,使用QueryDslPredicateExecutor。
http://www.baeldung.com/rest-api-search-language-spring-data-querydsl