JPA/HibernateでOneToOneアイテムを自動的に削除するにはどうすればよいですか? 含まれるクラスで OneToOne アイテムを null に設定するだけで、Hibernate がそれを削除できるほどスマートになると思います。
単純なオブジェクトが与えられた場合、単純化されます。
@Entity
public class Container {
private Item item;
@OneToOne(cascade=CascadeType.ALL)
public Item getItem() { return item; }
public void setItem(Item newItem) { item = newItem; }
}
Item が Container に設定されると、Container はマージされて永続化され、行が挿入されます。
Container container = new Container();
container.setItem(new Item());
container = entityManager.merge(container);
// Row count is 1
ただし、アイテムが null に設定されているか、別のアイテムに設定されている場合、古いオブジェクトはテーブルにまだ存在します。
container.setItem(null);
container = entityManager.merge(container);
// Row count is STILL 1, leaving orphaned rows.
では、これらの OneToOne オーファンを削除するにはどうすればよいでしょうか?