我需要您幫助解決以下問題:有一個 spring boot 專案,它有兩個物體:Bank 和 CreditDetails,銀行將詳細資訊稱為 OneToMany,詳細資訊稱為 ManyToOne。在 Bank 物體中,級聯型別為 ALL,但當我嘗試洗掉銀行時,出現錯誤,可能是什么問題?
銀行:
@Entity
@Table(name = "banks")
@Getter
@Setter
@NoArgsConstructor
public class Bank {
@Id
@Column(name = "bank_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@OneToMany(orphanRemoval = true,cascade = CascadeType.ALL,
mappedBy = "bank", fetch = FetchType.LAZY)
private List<CreditDetails> creditDetails = new ArrayList<>();
@OneToMany(orphanRemoval = true,cascade = CascadeType.ALL,
mappedBy = "bank", fetch = FetchType.LAZY)
private List<Client> clients = new ArrayList<>();
}
信用詳情:
@Entity
@Table(name = "credit_details")
@Getter
@Setter
@NoArgsConstructor
public class CreditDetails {
@Id
@Column(name = "credit_details_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@Column(name = "credit_limit")
private BigDecimal creditLimit;
@Column(name = "credit_percent")
private BigDecimal creditPercent;
@ManyToOne(targetEntity = Bank.class, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinColumn(name = "bank_id")
private Bank bank;
@OneToMany(cascade = CascadeType.ALL,
mappedBy = "creditDetails")
List<CreditOffer> creditOffers;
}
DB(H2) 中的物體
create table banks
(
bank_id uuid primary key
);
create table credit_details
(
credit_details_id uuid primary key,
credit_limit bigint,
credit_percent numeric(5, 2),
bank_id uuid references banks (bank_id),
primary key (credit_details_id)
);
堆疊跟蹤:
參照完整性約束違規:“CONSTRAINT_8:PUBLIC.CREDIT_DETAILS FOREIGN KEY(BANK_ID) REFERENCES PUBLIC.BANKS(BANK_ID) ('ae1ce5c1-b1eb-4ee7-a1a2-63d831b0fd0a')”;
uj5u.com熱心網友回復:
我使用 spring、hibernate、H2 資料庫和 Postgres 資料庫重建了您的設定。對我來說,一切都按預期進行。
為了測驗我使用了 BankRepository 的物體:
public interface BankRepository extends CrudRepository<Bank, UUID> {}
和一個非常簡單的 RestController:
private final BankRepository bankRepository;
@DeleteMapping
public void removeBank(@RequestParam String uuid) {
bankRepository.deleteById(UUID.fromString(uuid));
}
@PostMapping("/add")
public Bank addBank() {
var bank = new Bank();
var creditDetails = new CreditDetails();
creditDetails.setBank(bank);
bank.setCreditDetails(List.of(creditDetails));
bankRepository.save(bank);
return bank;
}
如果您嘗試通過某些 SQL 直接洗掉 Bank 物體,或者您手動從資料庫中洗掉它,您可能會遇到錯誤。你能設定
spring.jpa.show-sql: true
并發布生成的 JPA 查詢?我的看起來像這樣:
Hibernate: select bank0_.bank_id as bank_id1_1_0_ from banks bank0_ where bank0_.bank_id=?
Hibernate: select creditdeta0_.bank_id as bank_id4_2_0_, creditdeta0_.credit_details_id as credit_d1_2_0_, creditdeta0_.credit_details_id as credit_d1_2_1_, creditdeta0_.bank_id as bank_id4_2_1_, creditdeta0_.credit_limit as credit_l2_2_1_, creditdeta0_.credit_percent as credit_p3_2_1_ from credit_details creditdeta0_ where creditdeta0_.bank_id=?
Hibernate: delete from credit_details where credit_details_id=?
Hibernate: delete from banks where bank_id=?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420541.html
標籤:
上一篇:如何在Swing中重疊面板?
