JPA найти с несколькими условиями - PullRequest
0 голосов
/ 22 октября 2019

здесь я пытаюсь jpa получить данные из mysql db, но я застрял с findby Как написать метод findBy для запроса ниже, используя данные о пружине crudrepository jpa?

select t.id, t.MSISDN, t.Param1, t.param2
  from BULK_REPOSITORY t
where t.Camp_Start_Date between Sysdate - 2 and sysdate
   and t.status = 0
   and t.camp_type = 1;

я пробовал это, но егоне работает:

List<Bulk_repository> findByStatusInAndfindByCamp_typeIn(int status, int camp_type);

у меня есть такой класс сущности:

@Entity
@Table(name = "BULK_REPOSITORY")
public class Bulk_repository {

   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   @Column(name = "id")
   private long id;

   @Column(name = "msisdn")
   private String msisdn;

   @Column(name = "camp_start_date")   
   private Date camp_start_date;

   @Column(name = "camp_end_date")
   private Date camp_end_date;

   @Column(name = "camp_type")
   private int camp_type;

   @Column(name = "camp_cd")
   private String camp_cd;

   @Column(name = "status")
   private int status;

   @Column(name = "process_date")
   private Date process_date;

   @Column(name = "entry_date")
   private Date entry_date;

   @Column(name = "entry_user")
   private String entry_user;

   @Column(name = "param1")
   private String param1;

   @Column(name = "param2")
   private String param2;

   @Column(name = "param3")
   private String param3;

   @Column(name = "param4")
   private String param4;

   @Column(name = "param5")
   private String param5;

   @Column(name = "error_desc")
   private String error_desc;

Ответы [ 3 ]

1 голос
/ 22 октября 2019

попробуйте ниже

 List<Bulk_repository>  findAllByStatusAndCamp_typeAndCamp_start_dateBetween(
int status, int camp_type,Date camp_start_dateStart, Date camp_start_dateEnd)

Везде, где вы хотите позвонить

@Autowired
private Bulk_repository bulkRepository;


public List<Bulk_repository> getListRepositoryByConditions(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -2);

Date startDate = cal.getTime();

Date endDate = new Date();

return bulkRepository.findAllByStatusAndCamp_typeAndCamp_start_dateBetween(
0, 1,startDate, endDate);

}
0 голосов
/ 22 октября 2019

Вы можете использовать @Query из Spring Data JPA с JPQL:

JPQL не поддерживает периоды. Таким образом, вы должны справиться с этим самостоятельно:

@Query("SELECT t from Bulk_repository t " + 
    "WHERE t.camp_start_date BETWEEN CURRENT_DATE AND :currentDateMinus2 " + 
    "AND t.status = :status " + 
    "AND t.camp_type = :campType")
List<Bulk_repository> findByStatusInAndfindByCamp_typeIn(
    @Param("status") int status, 
    @Param("campType") int camp_type, 
    @Param("currentDateMinus2") Date currentDateMinus2);
0 голосов
/ 22 октября 2019

Я рекомендую передать диапазон дат в качестве параметров методу.

 List< Bulk_repository> findByStatusIsAndCamp_typeIsAndCamp_start_dateBetween(int status, int campType, Date start, Date end)
...