【问题标题】:play framework 2.4 ebean [PersistenceException: Property [] not found on models.SearchContent]play framework 2.4 ebean [PersistenceException: Property [] not found on models.SearchContent]
【发布时间】:2016-01-29 18:25:28
【问题描述】:

嗨,男孩,嗨,女孩,我有一个问题。我有一个代码:

public static List createPosts(PagedList searchContents){

    List<Post> posts = new ArrayList<Post>();
    List<SearchContent> searchContentsList = new ArrayList<SearchContent>();
    searchContentsList = searchContents.getList();

分页列表生成器:

PagedList<SearchContent> list = Ebean.find(SearchContent.class)
                .setRawSql(rawSql)
                .findPagedList(pageNumber, resultsToPage);

我有个例外:

[PersistenceException: Property [] not found on models.SearchContent]

在这一行:

    searchContentsList = searchContents.getList();

为什么会出错?

【问题讨论】:

    标签: java playframework ebean


    【解决方案1】:

    这是因为 Ebean 对 select 子句属性执行了一些逻辑来获取对象的属性名称。它通过删除下划线将其转换为 camelCase。例如。如果我们有“select myid from ...”,那么它将搜索名称为“myid”的属性,但在您的 Model 类中,您可能已将成员变量名称写为“myId”。

    如果您的查询类似于“select my_id from ..”如果您的成员变量名称是 myid,它将正常工作。

    【讨论】:

      【解决方案2】:

      我有一个解决方案: 您在原始查询和模型中的属性名称应与数据库表相同。

      示例代码:-

      <code>
      
      RawSql rawSql = RawSqlBuilder
                      .parse("SELECT  distinct CASE WHEN PARENT_EQUIPMENT_NUMBER IS NULL THEN EQUIPMENT_NUMBER ELSE  PARENT_EQUIPMENT_NUMBER END AS PARENT_EQUIPMENT_NUMBER " +
                              "FROM TOOLS_DETAILS").create();
      
          Query<ToolsDetail> query = Ebean.find(ToolsDetail.class);
      
          ExpressionList<ToolsDetail> expressionList = query.setRawSql(rawSql).where();//ToolsDetail.find.where();
      
          if (StringUtils.isNotBlank(sortBy)) {
              if (StringUtils.isNotBlank(sortMode) && sortMode.equals("descending")) {
                  expressionList.setOrderBy("LPAD("+sortBy+", 20) "+"desc");
      
                  //expressionList.orderBy().asc(sortBy);
              }else if (StringUtils.isNotBlank(sortMode) && sortMode.equals("ascending")) {
      
                  expressionList.setOrderBy("LPAD("+sortBy+", 20) "+"asc");
                 // expressionList.orderBy().asc(sortBy);
              } else {
                  expressionList.setOrderBy("LPAD("+sortBy+", 20) "+"desc");
      
              }
      
      
          }
          if (StringUtils.isNotBlank(fullTextSearch)) {
              fullTextSearch = fullTextSearch.replaceAll("\\*","%");
              expressionList.disjunction()
                      .ilike("customerSerialNumber", fullTextSearch)
                      .ilike("organizationalReference", fullTextSearch)
                      .ilike("costCentre", fullTextSearch)
                      .ilike("inventoryKey", fullTextSearch)
                      .ilike("toolType", fullTextSearch);
          }
      
          //add filters for date range
          String fromContractStartdate = Controller.request().getQueryString("fm_contract_start_date_from");
          String toContractStartdate = Controller.request().getQueryString("fm_contract_start_date_to");
          String fromContractEndtdate = Controller.request().getQueryString("fm_contract_end_date_from");
          String toContractEnddate = Controller.request().getQueryString("fm_contract_end_date_to");
      
          if(StringUtils.isNotBlank(fromContractStartdate) && StringUtils.isNotBlank(toContractStartdate))
          {
      
              Date fromSqlStartDate=new Date(AppUtils.convertStringToDate(fromContractStartdate).getTime());
              Date toSqlStartDate=new Date(AppUtils.convertStringToDate(toContractStartdate).getTime());
              expressionList.between("fmContractStartDate",fromSqlStartDate,toSqlStartDate);
          }if(StringUtils.isNotBlank(fromContractEndtdate) && StringUtils.isNotBlank(toContractEnddate))
          {
              Date fromSqlEndDate=new Date(AppUtils.convertStringToDate(fromContractEndtdate).getTime());
              Date toSqlEndDate=new Date(AppUtils.convertStringToDate(toContractEnddate).getTime());
              expressionList.between("fmContractEndDate",fromSqlEndDate,toSqlEndDate);
          }
      
          PagedList pagedList = ToolsQueryFilter.getFilter().applyFilters(expressionList).findPagedList(pageNo-1, pageSize);
      
          ToolsListCount toolsListCount = new ToolsListCount();
          toolsListCount.setList(pagedList.getList());
          toolsListCount.setCount(pagedList.getTotalRowCount());
          return toolsListCount;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多