IncorrectResultSizeDataAccessException - 尝试简单地获取最新的行

时间:2014-08-22 19:48:20

标签: java sql spring spring-data

我有一个名为'ImportReceiptRepository'的Spring CrudRepository。

我只是想编写一个方法来抓取order by子句中的第一行。

以下是我目前正在使用的内容:

ImportReceipt importReceipt = this.importReceiptRepository.getOneByImportTypeOrderByTimestampDesc(importType);

问题是当返回多行时,Spring会抛出:

org.springframework.dao.IncorrectResultSizeDataAccessException: result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements

如果返回0-n行,我应该如何重命名这个CrudRepository函数来抓取第一行?

3 个答案:

答案 0 :(得分:2)

简单地使用Pageable是关键:

List<ImportReceipt> findByImportType(String importType, Pageable pageable);

并将其称为:

List<ImportReceipt> importReceipts = this.importReceiptRepository.findByImportType(importType, new PageRequest(0, 1, Direction.DESC, "Timestamp"));
ImportReceipt importReceipt = importReceipts.get(0);

信用:How to combine pagination with a criteria query in Spring Data JPA?

答案 1 :(得分:1)

从即将发布的Spring Data JPA 1.7版本开始,您最初声明的查询方法开箱即用。有关详细信息,请参阅this ticket。该支持已在该版本的第一个里程碑中发布。

答案 2 :(得分:0)

您可以通过findFirst使其更简单:

  input_hashtag_advance.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER: {
                        LayoutInflater inflater = LayoutInflater.from(getActivity());
                        Chip chip_item = (Chip) inflater.inflate(R.layout.layout_chip, null, false);
                        ChipGroup chip_hashtag = view.findViewById(R.id.chip_hashtag);
                        chip_item.setText(input_hashtag_advance.getText().toString());

                        input_hashtag_advance.setText(null);
                        chip_item.setOnCloseIconClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                chip_hashtag.removeView(v);
                            }
                        });
                        chip_hashtag.addView(chip_item);
                    }
                    return true;
                    default:
                        break;
                }
            }
            return false;
        }
    });

有关更多信息:Limiting Query Results