如何在Spring Data JPA中使用Entity Manager避免使用NULL参数和条件



我正在尝试使用和条件在网格上实现搜索功能。如果给出两个参数,则其给出结果。但是,如果我只想仅使用第一个字段搜索,而第二个字段为空。它根据和功能给出空数组。在这种情况下如何避免零参数。

如果一个参数为null,则如何避免该参数并根据该参数而不是null。

获得结果。

accountController

@RestController
@RequestMapping("/SpaceStudy/SpaceAdmin")
public class AccountController {
    @Autowired
    AccountService accService;
    @CrossOrigin(origins = "*")
    @GetMapping("/AccountMaintenance/LoadGrid")
    public Set<AccountModel> GridLoad( String sclientacctid, String sacctdesc) {
        return accService.gridLoad("1124100",null);

Accountervice

@Service
public class AccountService {
    @Autowired
    AccountRepository accRepo;
public Set<AccountModel> gridLoad( String sclientacctid,String sacctdesc) {
        if (sclientacctid != null || sacctdesc != null) {
            Set<AccountModel> gridObj1 = accRepo.findBySclientacctidAndSacctdesc(sclientacctid, sacctdesc);
            return gridObj1;
        }       
            Set<AccountModel> gridObj = accRepo.findBySclientacctid();
        return gridObj;
    }

accountrepository

@Repository
public interface AccountRepository extends JpaRepository<AccountModel, Integer>,AccontRepositoryCustom {
    @Query("select distinct(a.slocation) from AccountModel a where a.slocation !=null")
    List<AccountModel> findBySlocation();   
    @Query("select new map(acct.sclientacctid as sclientacctid ,acct.sacctdesc as sacctdesc ,"
            + "acct.slocation as slocation,invest.sinvestigatorname as sinvestigatorname ,"
            + "dept.sclientdeptid as sclientdeptid,dept.sdeptname as sdeptname ,acp.sccpcode as sccpcode)"
            + " from AccountModel acct join acct.department dept"
            + " join acct.investigator invest join acct.accountCPC acp" + " where acct.ninstid= 60")
    Set<AccountModel> findBySclientacctid();

accountrepositorycustomimpl

@Repository
public class AccountRepositoryCustomImpl implements AccontRepositoryCustom {
    @PersistenceContext
    EntityManager entityManager;
    @SuppressWarnings("unchecked")
    @Override
    public Set<AccountModel> findBySclientacctidAndSacctdesc(String sclientacctid, String sacctdesc) {
        Query query = entityManager
                .createQuery("select new map(acct.sclientacctid as sclientacctid ,acct.sacctdesc as sacctdesc ,"
                        + "acct.slocation as slocation,invest.sinvestigatorname as sinvestigatorname ,"
                        + "dept.sclientdeptid as sclientdeptid,dept.sdeptname as sdeptname ,acp.sccpcode as sccpcode)"
                        + " from AccountModel acct join acct.department dept"
                        + " join acct.investigator invest join acct.accountCPC acp" 
                        + " where acct.sclientacctid=?1 and acct.acctdesc=?2 ");
        query.setParameter(1, sclientacctid);
        query.setParameter(2, sacctdesc);
        return (Set<AccountModel>) query.getResultList();
    }     
}

我在春天是新来的。有人可以帮助我,我需要在上述代码中更改吗?

您可能会尝试以下类似(虽然未测试(:

    Query query = entityManager
            .createQuery("select new map(acct.sclientacctid as sclientacctid ,acct.sacctdesc as sacctdesc ,"
                    + "acct.slocation as slocation,invest.sinvestigatorname as sinvestigatorname ,"
                    + "dept.sclientdeptid as sclientdeptid,dept.sdeptname as sdeptname ,acp.sccpcode as sccpcode)"
                    + " from AccountModel acct join acct.department dept"
                    + " join acct.investigator invest join acct.accountCPC acp" 
                    + " where acct.sclientacctid=?1 and (?2 is null or acct.acctdesc =?2) ");

最新更新