java - 如何创建搜索嵌入值的存储库方法?
问题描述
我有一个可嵌入的类来保存参考 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);
}
解决方案
我通过创建一个default
允许我按原始类型调用它的方法解决了这个问题。
public interface BusinessReferenceRepository<T> {
Optional<T> getByBusinessReference(BusinessReference businessReference);
default Optional<T> getByBusinessReference(String referenceId) {
return getByBusinessReference(new BusinessReference(referenceId));
}
}
推荐阅读
- java - Maven 依赖项:列表显示的版本与正在执行的版本不同
- c# - Xamarin.Android 上的可绘制动画
- android-studio - 在 Play 商店进行 beta 测试的 Android Studio 应用
- amazon-web-services - 通过 API-Gateway 调用 Lambda 并给出 403 响应?
- php - 抽出随机数量的问题,例如 04 out of 10
- excel - 日期之间不同列中的 sumproduct
- opencv - 从深度图像进行头部分割
- angular - (Angular 5)错误:control.registerOnChange 不是函数
- ios - 没有 TableView 的 StackView 内的 UITableViewCell
- c++ - C ++正则表达式替换整个单词