Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 在更新时休眠多对多关联删除_Hibernate_Many To Many_Jointable - Fatal编程技术网

Hibernate 在更新时休眠多对多关联删除

Hibernate 在更新时休眠多对多关联删除,hibernate,many-to-many,jointable,Hibernate,Many To Many,Jointable,我正在从事一个项目,在这个项目中,我有一个多对多的关联,下一种方式是: public class Marca implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "nombre")

我正在从事一个项目,在这个项目中,我有一个多对多的关联,下一种方式是:

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;

}
我做错了什么?如何避免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);
}

“Marca boject id”是主键吗?通常不修改primarykey,如果这样做,那么如果Cascade=all,则可以期望删除相关数据。我建议您在尝试更新Marca对象Id并使用新Id再次将其保存到db时,拉动子集合渴望加载。当然,在保存此之前,您必须使用旧主键删除数据

是的,Marca对象具有标识主键,但在更新对象时不会修改Id,其他属性正在更新。我编辑答案以包含整个Marca类。您可以尝试将joincolumn和InverseJoinColumn属性设置为Updateable,nullable=false。这没用。无论如何,我认为这可以避免在我真的想要修改Marca对象时修改。是的,它可以帮助您在更新时不包括联接表。你说,它不起作用了?是否表示联接表中的数据仍在删除?您可以在存储数据的地方发布代码吗?是的,联接表中的数据仍在删除,我编辑问题以添加存储数据的代码。为什么要将实体Id设置为null?这是第一次保存吗?还是更新?这个想法有点奇怪。当修改Marca对象时,需要创建一个引用原始Marca的新记录,因此我这样做:entity.setReferenceId;对象“entity”包含修改的数据,然后我将id设置为null以指示保存它的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);
}