簡體   English   中英

Spring JpaRepository 不適用於事務性

[英]Spring JpaRepository not working with transactional

我有以下界面:

public interface SnapshotRepository extends JpaRepository<Snapshot, Integer>, ISnapshotRepositoryExtra { }

如您所見,擴展:

public interface ISnapshotRepositoryExtra {
    Optional<Snapshot> latest();
}

...我已經在以下類中實現了該latest()方法:

@Transactional
public class SnapshotRepositoryExtra implements ISnapshotRepositoryExtra {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public Optional<Snapshot> latest() {
        return (Optional<Snapshot>) entityManager
                .createQuery("SELECT r FROM snapshot r order by timestamp DESC LIMIT 1")
                .getResultStream().findFirst();
    }
}

但是,當我啟動該項目時,我看到:

java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com...persistance.snapshot.ISnapshotRepositoryExtra.latest()! No property latest found for type Snapshot!

所以我的問題是,為什么 Spring 沒有看到我剛剛制作的 class SnapshotRepositoryExtra

Spring 數據對您如何命名事物很挑剔。 根據文檔

class 名稱中與片段接口對應的最重要部分是 Impl 后綴。

換句話說,您需要調用類似SnapshotRepositoryExtra之類的接口和 Spring Data 的實現SnapshotRepositoryExtraImpl來識別它(我見過的大多數示例都會使用CustomSnapshotRepository之類的接口作為接口,但我認為不需要約定) .

這是最新版本; 以前版本的 Spring 數據有不同的命名要求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM