Запрос на удаление Quarkus Swagger UI Hibernate к PostgreDB завершается автоматическиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Запрос на удаление Quarkus Swagger UI Hibernate к PostgreDB завершается автоматически

Сообщение Anonymous »

У меня есть проект Quarkus, использующий PostgreSQL и SwaggerUI, в котором я могу вручную удалять строки из таблиц в пользовательском интерфейсе базы данных IntelliJ, но когда я пытаюсь сделать это с помощью запроса DELETE, происходит сбой без выдачи каких-либо исключений или кода ошибки. . Странно то, что если строка, которую я пытаюсь удалить, не связана каким-либо FK с другой таблицей, запрос фактически проходит и удаляет строку. Однако это не должно быть проблемой, даже если есть несколько FK, поскольку я могу сделать это вручную. Я также пытался УДАЛИТЬ запрос с помощью Postman и получил тот же результат - безуспешно. Я предоставлю свои классы сущностей, сервисов, репозиториев и ресурсов. Для ясности: в GameEntity есть 4 поля FK, но я предоставлю только одно из них (Жанры), поскольку все они ведут себя одинаково. Я пытаюсь удалить таблицу игр.
@Entity(name = "Games")
public class GameEntity extends PanacheEntity {
@Column(length = 100, nullable = false, unique = true)
@NotBlank(message = "Title is required")
private String title;

@Column(length = 1000)
private String description;

@Column(name = "release_date")
@Past(message = "Release date must be in the past or present")
private LocalDate releaseDate;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "genreID", nullable = false)
@NotNull(message = "Genre is required")
private GenreEntity genre;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "publisherID", nullable = false)
@NotNull(message = "Publisher is required")
private PublisherEntity publisher;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "developerID", nullable = false)
@NotNull(message = "Developer is required")
private DeveloperEntity developer;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "platformID", nullable = false)
@NotNull(message = "Platform is required")
private PlatformEntity platform;

@OneToMany(mappedBy = "game", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List reviews;

/// getters, setters, toString
}

@Entity(name = "Genres")
public class GenreEntity extends PanacheEntity {
@Column(length = 50, nullable = false, unique = true)
@NotBlank(message = "Genre name is required")
private String genre;

@OneToMany(mappedBy = "genre", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List games;

/// getters, setters, toString
}

@ApplicationScoped
public class GameService {
@Inject
GameRepository repository;
@Inject
GenreRepository genreRepository;
@Inject
PublisherRepository publisherRepository;
@Inject
DeveloperRepository developerRepository;
@Inject
PlatformRepository platformRepository;

public List getAll() {
return repository.listAll() // Optional sorting
.stream()
.map(this::mapToDto)
.toList();
}

@Transactional
public void create(GameDTO dto) {
GameEntity entity = mapToEntity(dto);
repository.persist(entity);
}

@Transactional
public void update(Long id, GameDTO dto) {
GameEntity updatedEntity = mapToEntity(dto);
GameEntity entity = repository.findById(id);
if (entity == null)
throw new NotFoundException("Game not found with id: " + id);

entity.setTitle(updatedEntity.getTitle());
entity.setDescription(updatedEntity.getDescription());
entity.setReleaseDate(updatedEntity.getReleaseDate());
entity.setGenre(updatedEntity.getGenre());
entity.setPublisher(updatedEntity.getPublisher());
entity.setDeveloper(updatedEntity.getDeveloper());
entity.setPlatform(updatedEntity.getPlatform());

repository.persist(entity);
}

@Transactional
public void delete(Long id) {
GameEntity entity = repository.findById(id);
if (entity == null)
throw new NotFoundException("Game not found with id: " + id);

repository.delete(entity);
}

private GameEntity mapToEntity(GameDTO dto) {
GenreEntity genre = genreRepository.findByGenre(dto.getGenre());
if (genre == null)
throw new NotFoundException("Genre not found.");
PublisherEntity publisher = publisherRepository.findByPublisher(dto.getPublisher());
if (publisher == null)
throw new NotFoundException("Publisher not found.");
DeveloperEntity developer = developerRepository.findByDeveloper(dto.getDeveloper());
if (developer == null)
throw new NotFoundException("Developer not found.");
PlatformEntity platform = platformRepository.findByPlatform(dto.getPlatform());
if (platform == null)
throw new NotFoundException("Platform not found.");

GameEntity entity = new GameEntity();
entity.setTitle(dto.getTitle());
entity.setDescription(dto.getDescription());
entity.setReleaseDate(dto.getReleaseDate());
entity.setGenre(genre);
entity.setPublisher(publisher);
entity.setDeveloper(developer);
entity.setPlatform(platform);
return entity;
}

private GameDTO mapToDto(GameEntity e) {
return new GameDTO(
e.getID(),
e.getTitle(),
e.getDescription(),
e.getReleaseDate(),
e.getGenre().getGenre(),
e.getPublisher().getPublisher(),
e.getDeveloper().getDeveloper(),
e.getPlatform().getPlatform()
);
}
}

@ApplicationScoped
@Path("api/v1/games")
public class GameResource {

@Inject
GameService service;

@GET
public Response getAll() {
List list = service.getAll();
return Response
.ok(list)
.build();
}

@POST
public Response create(GameDTO dto) {
service.create(dto);
return Response
.status(Response.Status.CREATED)
.entity(dto)
.build();
}

@PUT
@Path("/{id}")
public Response update(@PathParam("id") Long id, GameDTO dto) {
service.update(id, dto);
return Response
.ok(dto)
.build();
}

@DELETE
@Path("/{id}")
public Response delete(@PathParam("id") Long id) {
service.delete(id);
return Response
.noContent()
.build();
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... l-silently
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»