Điều này đã được yêu cầu một lần trước đó nhưng giải pháp không giải quyết được vấn đề. Tôi tạo ra một thử nghiệm JUnit:Không được hỗ trợ cho các hoạt động DML với truy vấn cập nhật JPA
@Test
@Transactional
@Modifying
public void updateMaterialInventory() throws Exception{
// Initialize the database
materialRepository.saveAndFlush(material);
long id = material.getId();
materialRepository.updateMaterialInventory(id,UPDATED_INVENTORY_COUNT);
assertEquals(material.getInventory_count(), UPDATED_INVENTORY_COUNT, 0);
}
Truy vấn các thử nghiệm trên được gọi là:
@Query("UPDATE Material m SET m.inventory_count = ?2 WHERE m.id = ?1")
void updateMaterialInventory(Long id,int newInventoryAmount);
Lỗi:
Caused by: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [UPDATE com.htd.domain.Material m SET m.inventory_count = ?2 WHERE m.id = ?1]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.errorIfDML(QueryTranslatorImpl.java:318)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:369)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:495)
... 55 more
lý do tại sao tôi nhận được "Thực thi cập nhật/xóa truy vấn" ngoại lệ khi cập nhật? – Kenji
@Kenji Thêm nội dung này: @Transactional (tuyên truyền = Tuyên truyền.REQUIRED, readOnly = false) – user64141