多对多中间表,save的时候默认插入,不更新

image
该表为中间表,
在save之前,我用entitystate isNew看了这个entity是false,但是运行报错。变成了insert。
image

从错误看,说的是fd_id不能设置为 null?

应该是设置ManytoMany不需要单独去保存中间表,只要设置主表对应的ManyToMany对象即可。
但是由于我没有用系统自动生成ID,我加了一个entity-listener在saving方法里面设置ID。
但是是无效的。
是否有其他方式保证中间表自动保存的时候添加ID?

好像中间表自己设置id的这种用不了ManyToMany

这个怎么会无效呢?

一般就是用实体事件在提交前设置需要的属性。

我debug,它没有走到那里,为此,我自己加了一个class也是无效的。

@Entity
@EntityListeners(EntityListener.class)
public class MyEntity {
    @Id
    private Long id;

    // Other fields and mappings

    // Getters and setters
}

public class EntityListener {

    @PrePersist
    public void prePersist(MyEntity entity) {
        if (entity.getId() == null) {
            Long customId = generateCustomId(); // 自定义ID生成逻辑
            entity.setId(customId);
        }
    }

    private Long generateCustomId() {
        // 编写自定义的ID生成逻辑
        // 返回唯一的ID值
    }
}

我试了下,可以的:
image

不行的话,你试试 实体事件 :: Jmix 文档 好用不

您这个应该是有jmixgeneratevalue才生效的,但是我的项目由于历史包袱无法用jmix生成的ID

实体事件我试了,无效

项目重启了吗,这些改动需要重启项目的

跟这个没有关系的。

重启了

各种都试了,现在觉得不用多对多了,这样出现问题的几率也小很多

没道理。。有时间你新建一个项目看看有这个问题嘛 :joy:

有时间,我试试

1 个赞