0
我有以下的POJOs:Hibernate的繼承更新問題
@Entity
@Table(name = "COMMUNICATION")
@Audited
public class CommunicationPojo
implements Serializable
{
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "TRANSMISSION_TYPE", nullable = false, unique = true)
private TransmissionTypePojo transmissionType;
}
@Entity
@Table(name = "TRANSMISSION_TYPE")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Audited
public abstract class TransmissionTypePojo
implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private long id;
@OneToOne(mappedBy= "transmissionType")
private CommunicationPojo communication;
}
@Entity
@Table(name = "TRANSMISSION_TYPE_AS2")
@Audited
public class TransmissionTypeAS2Pojo
extends TransmissionTypePojo
implements Serializable
{}
@Entity
@Table(name = "TRANSMISSION_TYPE_MAIL")
@Audited
public class TransmissionTypeMailPojo
extends TransmissionTypePojo
implements Serializable
{}
如果,如果保存的通信實例與TRANSMISSION_TYPE_MAIL實例,改變了通信實例,以便它包含TRANSMISSION_TYPE_AS2實例,而不是一個TRANSMISSION_TYPE_MAIL實例,並更新通信中,hibernate會在TRANSMISSION_TYPE_AS2中插入一個條目,但不會刪除TRANSMISSION_TYPE_MAIL中的舊條目。 是否有可能通過休眠來自動刪除舊條目,還是必須自己刪除它?
我添加了orphanRemoval = true,但TRANSMISSION_TYPE_AS2條目仍然存在。 Hibernate不會對TRANSMISSION_TYPE_AS2表執行刪除操作。我還將hashcode和equals函數添加到了transmission_type-pojo ... – Nephisto
它應該起作用,至少如果您正在處理附屬實體。如果你在分離的實體上完成所有這些操作,然後使用saveOrUpdate或合併,它將無法工作。請參閱https://hibernate.onjira.com/browse/HHH-5559。 –