如何创建一个搜索嵌入值的存储库方法?

时间:2019-06-18 19:56:35

标签: java spring-data-jpa spring-data

我有一个可嵌入的类来保存引用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搜索,如果需要,可以使用该ID扩展另一个CrudRepository。请注意,我想要的参数是String而不是对象。

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

1 个答案:

答案 0 :(得分:0)

我通过创建一个default来解决此问题,该类型允许我按原始类型进行调用。

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

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