[英]JPQL Query not updating database
我有一個帶有@NamedQuery
的 JPQL,它不返回錯誤,但也不更新數據庫。
這是實體。
@Entity
@Table(name = "restricao_decomp")
@NamedQueries({
@NamedQuery(name = RestricaoDecomp.UPDATE_BY_ID, query = "UPDATE RestricaoDecomp a SET a.nome = ?1, "
+ "a.comentar = ?2, a.revisada = ?3 where id = ?4"),
})
public class RestricaoDecomp {
public static final String UPDATE_BY_ID = "RestricaoDecomp.updateById";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
@Column(name = "nome")
String nome;
@Column(name = "comentar")
String comentar;
@Column(name = "data")
LocalDate data;
@Column(name = "revisada")
Integer revisada;
public int getId() {
return id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getComentar() {
return comentar;
}
public void setComentar(String comentar) {
this.comentar = comentar;
}
public LocalDate getData() {
return data;
}
public void setData(LocalDate data) {
this.data = data;
}
public Integer getRevisada() {
return revisada;
}
public void setRevisada(Integer revisada) {
this.revisada = revisada;
}
}
這是道:
@Stateless
public class RestricaoDecompDAO extends AbstractDAO<RestricaoDecomp, Integer> {
private static final long serialVersionUID = -5926717750595575580L;
public void updateById(String nome, String comentar, Integer revisada, Integer id) {
executeNamedQuery(RestricaoDecomp.UPDATE_BY_ID, nome, comentar, revisada, id);
}
}
這就是它在Service
中的調用方式......(參數在 object 中更改。調試顯示它。)
restricaoDecompDAO.updateById(restricao.getNome(), restricao.getComentar(), 1, restricao.getId());
但是...當調用updateById
方法時,什么也沒有發生...而且我沒有收到任何錯誤...它只是不更新,也不返回任何錯誤...到底發生了什么?
PS:我沒有使用 Spring,只是 JPA...這讓我發瘋,沒有錯誤。 沒有更新...請幫助! =)謝謝!
PS:我還有其他@NamedQueries
(不是UPDATE,而是SELECT),效果很好....
我建議這樣做:
@Stateless
public class RestricaoDecompDAO extends AbstractDAO<RestricaoDecomp, Integer> {
@PersistenceContext
private EntityManager em;
public void updateById(String nome, String comentar, Integer revisada, Integer id) {
if(id == null) return;
var o = em.find(RestricaoDecomp.class, id);
if(o == null) return;
o.setNome(nome);
o.setComentar(comentar);
o.setRevisada(revisada);
}
}
我設法讓它工作。 這就是我所做的:
public void update(RestricaoDecomp rd, RestricaoDecompDAO dao) {
if (rd == null)
return;
RestricaoDecomp rdDB = dao.findById(rd.getId());
if (rdDB == null)
return;
rdDB.setComentar(rd.getComentar());
rdDB.setRevisada(1);
rdDB.setNome(rd.getNome());
dao.update(rdDB);
}
第一個方法參數中的 Object 包含我想要保留的更改,dao 是一個 object,它是服務中的@Inject
。
擴展 class 的AbstractDAO
有一個更新方法,它最終起作用了(但如果我直接從服務調用 Abstract 的更新,它也不起作用。
AbstractDAO 實現了@PersistenceContext
和EntityManager
我相信不知何故這是查詢的 UPDATE 語句的問題,因為 SELECT 工作得很好。
嗯,就是這樣! =)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.