簡體   English   中英

Spring JpaRepository getOne()用於以PK作為字符串的表

[英]Spring JpaRepository getOne() for table with PK as String

我正在使用帶有JpaRepository的Spring Boot。 我有一個表定義為一個字符串的PK。

CREATE TABLE mytable (
    uuid uuid DEFAULT gen_random_uuid() PRIMARY KEY,
    url text NOT NULL,
    status status DEFAULT 'pending' NOT NULL,
    created_at timestamp with time zone DEFAULT now() NOT NULL
);

在JpaRepository中,我該如何做getOne(uuid)的等效項? getOne(uuid)收到參數類型Long),即,如何為String類型的uuid檢索一行?

@Entity
@Table(name = "mytable")
public class MyTableEntity {

    public enum Status {
        pending,
        complete,
        processing,
        failed
    }

    @Id
    @Column(name = "uuid")
    //@GeneratedValue(strategy = GenerationType.AUTO)
    private String uuid;

    @Column(name = "url", nullable = false)
    private String url;

    @Enumerated(EnumType.STRING)
    @Column(columnDefinition = "photo_status", nullable = false)
    //@Type( type = "pgsql_enum" )
    private Status status;

    @Column(name = "created_at", nullable = false)
    private LocalDateTime created_at;

Repostory

public interface MyRepository extends JpaRepository<MyTableEntity, Long> {
}

因此,如果您的實體具有String鍵,則可以使用Repository此類聲明:

@Repository
public interface MyRepository extends JpaRepository<MyTableEntity, String> {
}

現在,如果要通過id獲得實體(類型為String ,則可以使用例如:

private void someMethod() {
    UUID uuid = UUID.randomUUID();
    MyTableEntity myEntity = myRepository.getOne(uuid.toString());
}

如果您查看JpaRepository定義,則它期望第一個類型是您的Entity類,第二個是該實體的鍵的類型:

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>

暫無
暫無

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

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