嘗試更新資料庫中的記錄但收到此錯誤:
Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.7.4.v20190115-ad5b7c6b2a): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [UPDATE DATABASE.PROPOSAL p SET p.proposal_for = 10 WHERE p.proposal_id = 1].
[29, 43] The state field cannot be resolved.
[55, 68] The state field path 'p.proposal_id' cannot be resolved to a valid type.
下面的代碼負責插入它
public int updateFor(int forCount, Long propId) {
int newCount = forCount 1;
int propIdNew = propId.intValue();
Query q = em.createQuery("UPDATE DATABASE.PROPOSAL p SET p.proposal_for = " newCount " WHERE p.proposal_id = " propIdNew );
return q.executeUpdate();
}
我不確定 propId 是 Long 是否存在型別問題,或者我是否寫錯了 SQL 路徑,或者兩者兼而有之。
uj5u.com熱心網友回復:
您正在嘗試以 JPQL 的形式執行 SQL 查詢。
有幾個選項可以避免這種情況下的錯誤:
#1(最簡單)。
使用createNativeQuery方法
Query q = em.createNativeQuery("UPDATE DATABASE.PROPOSAL p SET p.proposal_for = " newCount " WHERE p.proposal_id = " propIdNew );
#2。
使您的查詢成為 JPQL。這是邁出第一步美好的一面春天的伙伴關系。
- 創建一個
Proposal描述PROPOSAL表及其欄位的類 - 創建一個
ProposalRepository類 - 對您的 SQL 查詢進行一些小的更改,以使其適應 JPQL 語法
@Query在新方法之上的注釋中設定更改的查詢ProposalRepositoryProposalRepository通過自動裝配的實體呼叫方法
結果應該是這樣的:
@Modifying
@Query("update Proposal p set p.proposal_for = :newCount where p.proposal_id = :propIdNew ")
void update(@Param("newCount") int newCount, @Param("proposal_id") int propIdNew)
#3(首選)。
充分利用美好的一面春天。通過方法
更新物體。
在這種情況下,您仍然需要從選項 #2 執行步驟 1 和 2 - 但最終不需要手動 JPQL 解決方案。org.springframework.data.repository.CrudRepository#save
- 創建一個
Proposal描述PROPOSAL表及其欄位的類 - 創建一個
ProposalRepository類,它擴展JpaRepository或CrudRepository - 獲取您想要更改的記錄,方法是通過它
ProposalRepository。獲得一個的常用方法是使用findById方法 - 隨心所欲地改變它
save通過 ProposalRepository 實體使用方法,將更改后的 Proposal 物件設定為引數- 讓春天來做這件事
@Autowired
private ProposalRepository proposalRepository;
private void example(Long recordId) {
Proposal proposal = proposalRepository.findById(recordId);
proposal.setProposalFor(10);
proposalRepository.save(proposal);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478765.html
