首页 > 解决方案 > 如何创建搜索嵌入值的存储库方法?

问题描述

我有一个可嵌入的类来保存参考 ID,因为我不想在每个 JPA 实体中重复列的详细信息。

@Data
@Embeddable
public class BusinessReference {
    private static final int LENGTH = 64;

    @Column(
        columnDefinition = "VARCHAR(64)",
        length = LENGTH,
        updatable = false,
        nullable = false,
        unique = true)
    @Size(min = LENGTH, max = LENGTH)
    @Pattern(regexp = "^[!-~]+$")
    private String referenceId;

}

现在我有一个实体

@Data
@Entity
public class Sample {
    @Id
    @GeneratedValue
    @Column(
        updatable = false,
        nullable = false,
        columnDefinition = "BINARY(16)")
    private UUID id;

    @Embedded
    private BusinessReference businessReference;

}

我想要做的是创建一个通用接口,它允许我通过引用 ID 进行搜索,CrudRepository如果需要,我可以使用它来扩展另一个。注意我想要的参数是字符串而不是对象。

public interface BusinessReferenceRepository<T> {
    Optional<T> getByBusinessReference(String referenceId);
}

标签: javaspring-data-jpaspring-data

解决方案


我通过创建一个default允许我按原始类型调用它的方法解决了这个问题。

public interface BusinessReferenceRepository<T> {
    Optional<T> getByBusinessReference(BusinessReference businessReference);

    default Optional<T> getByBusinessReference(String referenceId) {
        return getByBusinessReference(new BusinessReference(referenceId));
    }
}


推荐阅读