У меня есть проект 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
Запрос на удаление Quarkus Swagger UI Hibernate к PostgreDB завершается автоматически ⇐ JAVA
Программисты JAVA общаются здесь
1730553369
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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79150745/quarkus-swagger-ui-hibernate-delete-request-to-postgredb-fail-silently[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия