【发布时间】:2022-01-22 15:55:50
【问题描述】:
我的 Java (Spring Boot) 应用程序中有以下投影:
public interface DemoProjection {
UUID getUuid();
String getName();
String getSurname();
String getLabel();
void setLabel(String label);
我想在我的服务中设置这个 label 字段:
public DemoProjection findAByUuid(UUID uuid) {
// returns a single record
final DemoProjection demo = demoRepository.findAByUuid(uuid);
final String label = String.format(
"Name: %s%nSurnamame Surname: %s",
demo.geteName(),
demo.getSurname());
// ! this line throws error
demo.setLabel(label);
return demo;
}
demo.setLabel(label); 抛出错误:“无法设置投影 TupleBackedMap 无法修改。”
那么,如何在投影中设置label 字段?
【问题讨论】:
-
demoRepository.findAll()返回什么? -
它当然会返回投影
-
findAll()似乎返回了超过 1 个对象,它被映射到 touples 而不仅仅是 1 个对象。这意味着您不能像使用单个对象那样直接访问字段。您应该重新考虑您的命名约定。 -
不,它只返回
DemoProjection类型中的一个元素。对不起,我打错了它的名字。 -
设置断点并停止
setLabel()上的代码。您将看到您的对象可能看起来不同。可能不是主对象本身,而是标签属性。
标签: java spring spring-boot projection