Именованный запрос со списком объектов в качестве входных данных с использованием именованного запроса JPA - PullRequest
0 голосов
/ 18 февраля 2020

Получение ниже QueryExecutionRequestException при попытке выполнить точное обновление именованного запроса с использованием репозитория JPA.

org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [update com.company.farmer.entity.FarmProducts p set p.isDeleted=:isDeleted where p.productId IN (:productIdsList_0, :productIdsList_1)]; nested exception is java.lang.IllegalStateException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [update com.company.farmer.entity.FarmProducts p set p.isDeleted=:isDeleted where p.productId IN (:productIdsList_0, :productIdsList_1)]

Код:

@Repository
public interface FarmProductRepository extends JpaRepository<FarmProducts, Long> {

void deleteProduct(@Param("isDeleted") String isDeleted, @Param("productIdsList") List<Long> productIdsList);

}

@Override
public String deleteProductAndCategory(long categoryId, FarmProductIdsDTO farmProductIds) {
    farmProductRepository.deleteProduct(FarmerProductCategoryConstants.DELETE_YES_FLAG, farmProductIds.getFarmProductIds());

    return FarmerProductCategoryConstants.SUCCESS;
}

@Entity
@Table(name="farm_products")
@Getter
@Setter
@ToString(exclude= "productCategory")
@NoArgsConstructor
@AllArgsConstructor
@NamedQueries({@NamedQuery(name="FarmProducts.deleteProduct", query="update FarmProducts p set p.isDeleted=:isDeleted where p.productId IN (:productIdsList)") })
public class FarmProducts extends BaseModel {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FARM_PRODUCT_GENERATOR")
    @SequenceGenerator(name = "FARM_PRODUCT_GENERATOR", sequenceName = "FARM_PRODUCT_GENERATOR_SEQ", allocationSize = 1)
    @Column(name = "farm_product_id")
    public Long productId;

    @ManyToOne
    @JoinColumn(name = "farm_product_category_id")
    @JsonIgnoreProperties("products")
    public ProductCategory productCategory;

    @Column(name = "product_name")
    public String product;

    @Column(name = "is_deleted")
    public String isDeleted;

}

Я пытаюсь передать список productId, чтобы сделать isDeleted как "N". Но функциональность обновления завершается сбоем из-за исключения QueryExecutionRequestException.

1 Ответ

0 голосов
/ 18 февраля 2020

По умолчанию Spring Data обрабатывает все запросы как операторы SELECT. Если у вас есть оператор UPDATE (или DELETE), вы должны применить аннотацию de @Modifying к запросу. См. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa .modifying-query

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...