Я боролся с этим уже пару дней и нахожусь в тупике. Я работаю над приложением, которое использует JPA, Rest, Hibernate, Springboot и запускает Java для серверной части.
Я вызываю этот метод из другого метода, чтобы избавиться от запись — кто-то удаляет элементы, связанные с параметром. У меня есть журналы, которые сообщают мне, что идентификатор параметра передается в запрос, поэтому проблема, похоже, связана с самим запросом. Когда я проверяю свой код в Swagger, я просто продолжаю получать сообщение «Данные не найдены».
Я впервые пытаюсь удалить запись со встроенным идентификатором, и я просто не могу заставить запрос работать. Может кто-нибудь сказать мне, что я делаю не так?
Вот метод удаления, в котором я использую свой запрос:
@Override
@Transactional
public void deleteParameterById(Long parameterId) {
Query query = entityManager
.createQuery("DELETE FROM ParameterEntity pa WHERE pa.ParameterEntityId.parameterId = ?1");
query.setParameter(1, parameterId)
.executeUpdate();
}
Вот встроенный идентификатор (ParameterEntityId.java):
@Embeddable
public class ParameterEntityId implements Serializable {
@Column(name = "PARAMETER_ID")
private Long parameterId;
@Column(name = "PARAMETER_ATTRIBUTE_TYPE_ID")
private Long parameterAttributeTypeId;
Вот мой файл сущности (ParameterEntity.java):
@Entity
@Table(name = "parameter")
public class ParameterEntity {
@EmbeddedId
private ParameterEntityId parameterEntityId;
@Column(name = "VALUE")
private String value;
Я нашел много примеров использования репозиториев JPA, но это не то, как настроено это приложение, а использование сущностей.
Сначала я просто просто попытался написать собственный запрос и вызвать прямо таблицу БД Parameters и выбрать parameter_cd напрямую, чтобы обойти этот встроенный ключ (БД использует составной ключ < em>parameter_id и parameter_attribute_type_id), но когда я тестировал его в Swagger, я просто получил сообщение «обработка», и запрос никогда не завершал выполнение.
Я также убедился, что у приложения есть необходимые разрешения на редактирование и удаление из таблицы.
вот мой исходный собственный запрос:@Override
@Transactional
public void deleteParameterById(Long parameterId) {
entityManager.createNativeQuery("DELETE FROM *dbname(redacted)*.parameter WHERE parameter_id = ?1")
.setParameter(1, parameterId).executeUpdate();
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... mbedded-id