Допустим, я хочу установить значение столбца записи как «RESOLVED».Тем не менее, я хочу получить это значение из Enum.Таким образом, запрос остается неизменным независимо от того, решит ли кто-либо «RESOLVED» изменить значение на «RESOLVE» или что-то в этом роде.Другими словами, разработчику не нужно редактировать запрос JPA с новым значением Enum.Просто хотел узнать, как можно это сделать, или JPA не позволяет этого.Я знаю, что запросы являются статическими, но раньше я мог передавать объект внутри запроса для хранения в нем полей результатов запроса.Поэтому я подумал, можно ли сделать то же самое с Enums.
Это моя текущая стратегия: передать «RESOLVE» как статус «@Param».Тем не менее, я все еще хотел бы знать, как передать Enums, так как это скорее обходной путь, чем ответ на сам вопрос.
public interface UpdateStatusStandardDAO extends JpaRepository<DBTableName, Long>
{
@Transactional
@Modifying(clearAutomatically = true)
@Query("UPDATE"
+ " TableName tn"
+ " SET"
+ " tn.status =:status"
+ " WHERE"
+ " tn.field1 =:field1"
+ " AND tn.field2 =:field2"
+ " AND tn.field3 =:field3")
int updateStatus(@Param("status") String status, @Param("field1") Long field1,
@Param("field2") String field2, @Param("field3") String field3);
}
Что я знаю: 1. @Transactional: для обновления / удаленияОПС.В противном случае я получил org.springframework.dao.InvalidDataAccessApiUsageException.2. @Modifying (clearAutomatics = true): поскольку менеджер сущностей не сбрасывает изменения автоматически по умолчанию.
Для простоты мы рассматриваем field1 как первичный ключ.Это тип Long (выводится также из сигнатуры интерфейса).
Для справки: если ни одно из полей в предложении where не является ключом, то рабочая среда SQL может отклонить ваш запрос, если заданы параметры SQL_SAFE_UPDATES.Это связано с тем, что вы не можете обновить или удалить записи, не указав ключ (например, первичный ключ) в предложении where.