Я считаю, что лучше всего использовать аннотацию @Query
в репозитории:
@Entity
@Table(name = "table_name")
public class TableName {
@Id
@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "status")
private String status;
@Column(name = "num")
private Integer num;
/**
* getters/setters, etc
**/
public interface TableNameRepository extends CrudRepository<TableName, Long> {
@Query("select t from TableName t where (status = :status1 and num = :num1 or status = :status2 and num = :num2)")
List<TableName> findByStatusAndNumOrStatusAndNum(@Param("status1") String status1,
@Param("num1") Integer num1, @Param("status2") String status2, @Param("num2") Integer num2);
}
Это способ получить значения для заданных параметров.В случае коллекций в качестве параметров нет встроенного ящика из-за концепции RDBMS.Вы можете просто написать некоторый код Java, основанный на значении ключа, и собрать результаты:
public interface TableNameRepository extends CrudRepository<TableName, Long> {
List<TableName> findByStatusAndNumIn(String status, Collection<Integer> nums);
}
List<TableName> result = new ArrayList<>();
List<TableName> itemGood = findByStatusAndNumIn("Good", numsGood);
List<TableName> itemBad = findByStatusAndNumIn("Bad", numsBad);
result.addAll(itemGood);
result.addAll(itemBad);