gpt4 book ai didi

Spring Data REST @Idclass 无法识别

转载 作者:行者123 更新时间:2023-12-02 01:07:47 26 4
gpt4 key购买 nike

我有一个名为 EmployeeDepartment 的实体,如下所示

@IdClass(EmployeeDepartmentPK.class) //EmployeeDepartmentPK is a serializeable object
@Entity
EmployeeDepartment{

@Id
private String employeeID;

@Id
private String departmentCode;
---- Getters, Setters and other props/columns
}

我有一个 Spring Data Repository 定义如下

@RepositoryRestResource(....)
public interface IEmployeeDepartmentRepository extends PagingAndSortingRepository<EmployeeDepartment, EmployeeDepartmentPK> {

}

此外,我注册了一个转换器来从 String 转换为 EmployeeDepartmentPK。

现在,对于一个由 ID employeeID="abc123"和 DepartmentCode="JBG"限定的实体,我希望调用 SDR 接口(interface)时使用的 ID 是 abc123_JBG。例如http://localhost/EmployeeDepartment/abc123_JBG应该给我结果,确实如此。

但是,当我尝试使用 PUT 保存实体时,Spring Data Commons 的 BasicPersistentEntity 类中可用的 ID 属性的值为abc123_JBG 代表部门代码。这是错误的。我不确定这是否是预期的行为。

请帮忙。

谢谢!

最佳答案

目前 Spring Data REST 仅支持由单个字段表示的复合键。这实际上意味着仅支持 @EmbeddedId。我已提交DATAJPA-770来解决这个问题。

如果您可以切换到@EmbeddedId,您仍然需要以您希望在 URI 中表示复杂标识符的方式教授 Spring Data REST,以及如何将路径段转换回实例您的 ID 类型。为此,请实现一个 BackendIdConverter 并将其注册为 Spring bean。

@Component
class CustomBackendIdConverter implements BackendIdConverter {

@Override
public Serializable fromRequestId(String id, Class<?> entityType) {

// Make sure you validate the input

String[] parts = id.split("_");
return new YourEmbeddedIdType(parts[0], parts[1]);
}

@Override
public String toRequestId(Serializable source, Class<?> entityType) {

YourIdType id = (YourIdType) source;
return String.format("%s_%s", …);
}

@Override
public boolean supports(Class<?> type) {
return YourDomainType.class.equals(type);
}
}

关于Spring Data REST @Idclass 无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com