[英]Is it possible delete entity from DB and then return this value in JpaRepository?
[英]The delete method from JpaRepository deletes all rows from the DB table
我有一個Admin
class 可以通過id
從數據庫中刪除cooks
。 當我使用 void deleteByUserRoleAndId(String role, Long id)
方法時; 它從數據庫中刪除所有列,但只需要一個,並且還清除與該表關聯的所有交叉表? 我的問題可能是什么?
廚師:
public class Cook {
public Cook() { // Пустой конструктор для Hibernate
}
// Поля
// name, lastName, login, password берем от класса User через связи;
private @Id
@GeneratedValue
Long id;
@Enumerated(EnumType.STRING)
@Column(name = "type")
private CookType cookType;
@Column(name = "rating")
private float rating;
@Column(name = "cook_status")
private boolean cookStatus;
@Column(name = "about_cook")
private String aboutCook;
//Relationships
//
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id") // Join without Cook in User class
private User user;
// Лист отзывов
@OneToMany(mappedBy = "cook", cascade = CascadeType.ALL)
@JsonIgnore // Таким образом я предотвратил рекурсию
private List<Review> reviewList;
// Лист поваров
@OneToMany(mappedBy = "cook", cascade = CascadeType.ALL)
@JsonIgnore // Таким образом я предотвратил рекурсию
private List<Order> orderList;
// Лист блюд
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(
name = "cook_dish",
joinColumns = @JoinColumn(name = "dish_id"),
inverseJoinColumns = @JoinColumn(name = "cook_id"))
@JsonIgnore // Таким образом я предотвратил рекурсию
private List<Dish> dish;
}
JpaRepo:
public interface CookRepository extends JpaRepository<Cook, Long> { // Интерфейс для репозитория Cook
// Удалить Повара Role + ID
void deleteByUserRoleAndId(String role, Long id);
管理服務:
@Transactional
public void deleteCook(Long id) {
cookRepository.deleteByUserRoleAndId("COOK", id);
}
管理員控制器:
@DeleteMapping("/delete/cook/{id}")
void removeCook(@PathVariable Long id) {
adminService.deleteCook(id);
}
當我使用腳本運行應用程序時,數據被添加到所有表中,然后當執行此方法時,它被清除了!
I'm writing the REST
of the app, using the download Spring boot
+ Spring MVC
+ Spring Security
+ hibernate
+ Jpa
+ PostgreSQL
你有一個 class 和一個名為“Cook”的數據庫表,它有一個唯一的 Id。 您想刪除一個您通過該 ID 標識的特定廚師 - 例如,您想刪除 ID 為 123 的廚師。
那里沒有“用戶角色”。 你不需要這個角色 - 你已經知道你正在處理 Cook 表。 事實上,class“Cook”甚至沒有“UserRole”屬性。
所以 spring 試圖盡可能地解釋deleteByUserRoleAndId
。 在沒有“userRole”屬性的情況下,它可能會嘗試將您的 function 名稱中的“用戶”與確實存在的“用戶”屬性進行匹配(為了比較, https://docs.Z2A2D595E2BED9A0B234F027. data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html說findByAddressZipCode(ZipCode zipCode);
將遍歷address
屬性)。 之后會發生什么我只能猜測。
無論如何,解決方案很簡單。 由於Cook
沒有UserRole
,因此方法名稱中沒有 UserRole 。
所以方法簽名者很簡單:
void deleteById(Long id);
服務是:
@Transactional
public void deleteCook(Long id) {
cookRepository.deleteById(id);
}
在 model class 我刪除cascade = CascadeType.All
並添加cascade = CascadeType.PERSIST
。 然后在 class Dish
中我做了同樣的事情。
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(
name = "cook_dish",
joinColumns = @JoinColumn(name = "dish_id"),
inverseJoinColumns = @JoinColumn(name = "cook_id"))
@JsonIgnore
private List<Dish> dish;
我遇到了同樣的問題。 我的錯誤在 application.properties 文件中。
spring.jpa.hibernate.ddl-auto =創建刪除
我應該使用 update 或 validate 而不是 create-drop
請參閱spring.jpa.hibernate.ddl-auto 屬性在 Z38008DD81C28F4DD7 中究竟如何工作?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.