我可以使用 Springprojections修改和保留現有物體的內容嗎?我的目標是僅更新特定欄位。資料庫中該行的任何其他欄位都應保持不變。用投影可以嗎?
或者投影總是只讀的?
public void update() {
PersonProjection p = repository.findByLastname("Doe");
p.setLastname("test");
repository.save(p); //how can I save only that field?
}
@Entity
public class Person {
@Id private long id;
private String firstname, lastname, age;
}
interface PersonProjection {
String getLastname();
void setLastname(String lastname);
}
interface PersonRepository extends CrudRepository<Person, Long> {
PersonProjection findByLastname(String lastname);
}
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections
uj5u.com熱心網友回復:
簡短的回答,不,您不能使用 Spring Data 投影進行更新。
如果您不想事先獲取物體,您可以做的是撰寫自定義查詢來更新某些欄位。
您也可以使用 JPQL 或本機查詢進行更新。
uj5u.com熱心網友回復:
我參考以下來源來回答您的問題:
從這個:
SQL SELECT 對應關系代數中的“投影”
而這個:
關系代數由 EF Codd 于 1972 年引入。它由一組關系運算組成:
PROJECT (π):從關系中提取指定的屬性(列)。令 R 為包含屬性 X 的關系。πX(R) = {t(X) ∣ t ∈ R},其中 t(X) 表示元組 t 的屬性 X 的值。
所以投影只是只讀的,正如它的名字所建議的那樣。
只更新一個欄位,請按照正常正確的JPA方式進行,首先獲取物體實體,然后更新其狀態,讓JPA自己弄清楚如何更新它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314191.html
上一篇:Spring訪問日志按天輪換
