当前位置: 首页 > 知识库问答 >
问题:

如何在spring data JPA中使用实体管理器避免和条件中出现空参数

闻人博
2023-03-14

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

如果一个参数为空,那么如何避免该参数,并根据该参数得到结果,而该参数不是空的。

会计控制

@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);

会计服务

@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;
    }

帐户存储库

@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();
    }     
}

Spring我是新来的。有谁能帮我,我需要在上面的代码中更改什么?

共有1个答案

訾晋
2023-03-14

您可以尝试以下方法(但未经测试):

    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) ");
 类似资料:
  • 我有一个分布式任务队列,其中的任务如下所示: 这里有一个竞争条件:如果任务队列软件在完全相同的时间启动其中两个任务,它们都将从数据库中获得相同的<code>old_path</code>,并且竞争失败者的取消链接调用失败(将失败者的新路径从未来的取消链接中孤立出来)。 有没有办法让我构建它来绕过这场比赛?如果需要,我可以从当前设计中抛出几乎任何东西。具体来说,我使用的是PostgreSQL,Pyt

  • 问题内容: 我有以下内容: 但是,并非总是有一个结果会给我以下错误: NoSuchElementException:没有值 那么,如果没有值,我该如何返回? 问题答案: 您可以使用,它比检查要简单得多:

  • 在一个项目中,我们使用的不是Spring(其中有大量关于test容器的信息),而是一个相当古老的jboss版本6.4.0。带有Hibernate的EAP,我们不能改变它。测试框架是Junit4,在某种程度上是arquillian。 我试图改进集成测试,并希望至少在数据库测试设置中使用testcontainers。我知道如何启动testcontainer(在这种情况下是mysqlcontainer)

  • 问题内容: 我正在开发的应用程序中存在潜在的竞争状况,我想在查询中考虑和避免这种情况。 总结应用程序流程… 在表中创建一个新行: 通过查看对时间敏感的表格,找出Bar先生是否是获胜者: 如果他是赢家,请相应地更新他的条目行: 由于每个奖项只能颁发一次,因此我需要消除比赛条件的任何可能性,在这种情况下,另一个过程可以查询奖项表并更新上述步骤2和3之间的条目表。 我一直在做一些研究,发现了大量关于事务

  • 问题内容: 我设计了一个简单的函数来返回数学函数,该函数可用于拟合实验数据。这些功能看起来很像以下内容: 不幸的是,我在RunTimeWarnings中遇到了麻烦: 由于值太大或太小。但我无法自行解决此问题。有什么办法可以重新定义我的功能,使其在没有警告的情况下通过? 问题答案: 使用以控制在这种情况下做什么numpy的:http://docs.scipy.org/doc/numpy/refere

  • 我听说过很多关于在Excel VBA中使用的憎恶是可以理解的,但我不确定如何避免使用它。我发现,如果我能够使用变量而不是函数,那么我的代码将更加可重用。但是,如果不使用,我不确定如何引用东西(如等)。 我已经找到了这篇关于范围的文章和这个关于不使用select的好处的例子,但是我找不到任何关于如何使用的东西。