在我们的实体 bean 中,我们使用自定义的 ID 格式,其中包括一个校验和来验证该 ID 是否有效。Id 看起来像 ID827391738979
。为了确保所有代码只使用正确的 IDs,我们创建了一个围绕 ID 字符串的代码包装器:
class ID {
public ID(String id) {
// parse and verify ID
}
public String toString() {
return id;
}
}
所有的代码都使用了这个 ID
对象。然而在我们的实体中,我们将 ID 定义为一个 String
:
class SomeEntity {
@Column
private String itsID;
}
现在我们想要使用Spring-Data-JPA通过对象的ID查询一些内容。所以我们执行以下操作:
public SomeEntity findByItsID(ID itsId);
问题在于,现在Spring Data JPA试图将ID类型的参数分配给查询,而查询当然期望一个
String
。
是否有可能让Spring Data JPA在将参数插入查询之前将其转换为预期的类型(例如通过注册Spring转换器)?或者,我们必须让该方法像这样接受一个字符串:public SomeEntity findByItsId(String itsId);
我更愿意避免这种情况,这样所有的代码都可以使用 ID
类而不是转向字符串。
@Convert
和@Enumerated
是不允许的(我曾经犯过这个错误,结果转换器没有被考虑进去)。 - Julien Kronegg@Converter(autoApply = true)
,则可以省略@Convert...
注释,并且转换器会自动应用于适合的所有位置。 - Datz