Я хочу удалить как строку в таблице Merchant, так и строку в таблице Address из базы данных. Продавец имеет address_id в своей таблице. Я создал DAO для Merchant и Address. Как я могу сделать это, используя только Entity Manager? Я упустил импорт, и геттеры и сеттеры. Кажется, только удалить строку в таблице Merchant, и оставить строку в таблице адресов. Спасибо за любую помощь, спасибо.
Всякий раз, когда я удаляю торговую сущность, она сохраняет идентификатор адреса и не удаляет соответствующий адрес в таблице адресов. Я не понимаю почему.
@Entity
public 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();
}
}
@Entity
public 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();
}
public void removeAddress(Address address) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.remove(em.contains(address) ? address : em.merge(address));
em.getTransaction().commit();
em.close();
}
}
public class Test {
public Test() {
// creating and persisting an addresss
Address address = new Address("123", "123", "123", "123", "123");
AddressDAO addressdao = new AddressDAO();
addressdao.persist(address);
// creating and persisting a merchant
Merchant merchant = new Merchant();
merchant.setName("merchant");
merchant.setAddress(address);
MerchantDAO merchantdao = new MerchantDAO();
merchantdao.persist(merchant);
// removing merchant
merchantdao.removeMerchant(merchant);
}
public static void main(String[] args) {
new Test();
}
}