为什么80%的码农都做不了架构师?>>>
保持还未被持久化的bean时,bean中包含外键且外键未被赋值,则会报“save the transient instance before flushing”这样的异常。异常的字面意思大概是刷入之前有临时实例将被保存。
根据这个字面意思,猜测是因为外键指向了临时实例,因此将外键主动赋值为空,或者将外键赋值真正存在并且被持久化的实例,这个错误就解决了。
比如:
if (menu.getId() == null || menu.getId() < 0) {menu.setParent(null);//外键在新建时必须主动设置为null,或者设置为指定的外键实体,否则会报执行临时(transient)错误。menu.setMenuCollection(new ArrayList<>());menu.setRoleCollection(new ArrayList<>());}
菜单项有可能没有父菜单项,因此需要主动设置为null,然后才能在保存时不报错。
BTW:这儿也佐证了null是个对象。