我工作的一個項目,我有一個多對多關聯,在未來的方式:Hibernate的多對多關聯刪除更新
public class Marca implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "nombre")
private String nombre;
@Column(name = "referencia")
private Long referencia;
@ManyToMany
@JoinTable(name = "MarcaTipoEquipo", joinColumns = { @JoinColumn(name = "idMarca") }, inverseJoinColumns = { @JoinColumn(name = "idTipoEquipo") })
private Set<TipoEquipo> equipos;
}
public class TipoEquipo implements Serializable {
@ManyToMany(mappedBy = "equipos")
private Set<Marca> marcas;
}
當我更新馬卡報對象,在加入記錄表格被刪除,其中id等於Marca對象ID。
我試過在TipoEquipo類中添加equals和hashCode方法,因爲這後Why is hibernate deleting rows from join table when adding element to set mapping many-to-many?建議:
@Override
public boolean equals(Object obj) {
return ((TipoEquipo) obj).getNombre().equalsIgnoreCase(this.nombre);
}
@Override
public int hashCode() {
return super.hashCode();
}
我在做什麼錯?如何避免Hibernate刪除連接表記錄?
編輯:存儲數據
public synchronized Marca actualizar(Marca entity) {
Long id = entity.getId();
entity.setId(null);
Marca marcaAnterior = busquedaGenericaBs.buscarPorId(Marca.class, id);
marcaAnterior.setIdEstatus(ClaveEstatus.POR_VALIDAR_MODIFICACION
.getClave());
entity.setIdEstatus(ClaveEstatus.POR_VALIDAR_MODIFICACION_NUEVO
.getClave());
entity.setReferencia(id);
genericDao.save(entity);
return genericDao.update(marcaAnterior);
}
你爲什麼要設置實體的ID爲空?這是第一次保存嗎?或更新? – Zeus
這個想法有點奇怪。當一個Marca對象被修改時,需要創建一個引用原始Marca的新記錄,因此我這樣做: entity.setReferencia(id); 對象的'實體'包含修改後的數據,然後我將id設置爲空以指示Hibernate保存它,然後從數據庫加載oiriginal記錄並更新它。 如果我不是很清楚,請告訴我。 – imarban