亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 jpa 從數據庫中刪除單向、一對一映射

如何使用 jpa 從數據庫中刪除單向、一對一映射

開滿天機 2023-11-10 16:51:00
我想從數據庫中刪除商家表中的行和地址表中的行。商戶的表中有address_id。我已經為 Merchant 和 Address 創建了 DAO。如何僅使用實體管理器來做到這一點?我省略了導入、getter 和 setter。似乎只刪除了Merchant表中的行,而保留了地址表中的行。任何幫助將不勝感激,謝謝。每當我刪除商家實體時,它都會保留地址id,并且不會刪除Address表中相應的地址。我不明白為什么。@Entitypublic class Merchant {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private int id;    private String name;    @OneToOne    private Address address;    public Merchant() {    }}public class MerchantDAO {    protected static EntityManagerFactory emf = Persistence.createEntityManagerFactory("hamzaspersistenceunit");    public void persist(Merchant merchant) {        EntityManager em = emf.createEntityManager();        em.getTransaction().begin();        em.persist(merchant);        em.getTransaction().commit();        em.close();    }    public void removeMerchant(Merchant merchant) {        EntityManager em = emf.createEntityManager();        em.getTransaction().begin();        em.remove(em.contains(merchant) ? merchant : em.merge(merchant));        em.getTransaction().commit();        em.close();    }}@Entitypublic class Address {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private int id;    private String name;    private String streetAddress;    private String city;    private String state;    private String zipCode;    public Address(String name, String streetAddress, String city, String state, String zipCode) {        super();        this.name = name;        this.streetAddress = streetAddress;        this.city = city;        this.state = state;        this.zipCode = zipCode;    }}public class AddressDAO {    protected static EntityManagerFactory emf = Persistence.createEntityManagerFactory("hamzaspersistenceunit");    public AddressDAO() {    }    public void persist(Address address) {        EntityManager em = emf.createEntityManager();        em.getTransaction().begin();        em.persist(address);        em.getTransaction().commit();        em.close();    }
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

嘗試使用 注釋實體address中的字段。默認情況下,此選項設置為,因此刪除操作不會級聯到實體。Merchant@OneToOne(orphanRemoval = true)falseAddress

更新:此問題的正確解決方案是使用@OneToOne(cascade = CascadeType.REMOVE)


查看完整回答
反對 回復 2023-11-10
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號