thinkgem / jeesite

Java rapid development platform, based (Spring Boot, Spring MVC, Apache Shiro, MyBatis, Beetl, Bootstrap, AdminLTE), online code generation, including modules: Organization, role users, menu and button authorization, data permissions, system parameters, content management, workflow, etc. Loose coupling design is adopted; one key skin switch; account security Settings, password policies; Online scheduled task configuration; Support cluster, support SAAS; Support for multiple data sources
http://jeesite.com
Apache License 2.0
8k stars 5.66k forks source link

调整gen时遇到一个奇怪的问题 #166

Open dairymix opened 9 years ago

dairymix commented 9 years ago

您好 我最近使用jeesite时碰到个奇怪的问题 求大神帮助来了

由于最近用jeesite整合pg流程,代码结构和适配做了些微调,但业务逻辑没有变化.

我在整合过程中,通过"代码生成器(gen)"的"业务表添加"把test_data添加后,发现不能在"业务表列表"中针对表记录直接删除.看了下后台日志,发现 ..\GenTableColumnDao.xml中的:

UPDATE gen_table_column SET del_flag = #{DEL_FLAG_DELETE} WHERE gen_table_id = #{genTable.id}

这段sql在后台maper后执行时,传入了两个id参数, 并且他们的值都相同,而且等于genTable.id的取值. 也就是说DEL_FLAG_DELETE的真实取值没有被传入,而被传递成genTable.id. 由于del_flag的长度是char(1),从而造成字段超过长度,导致后台报错.

可是同样是该文件中的语句:

UPDATE gen_table_column SET del_flag = #{DEL_FLAG_DELETE} WHERE id = #{id}

这段sql在后台maper后执行时,也传入了两个参数, 并且DEL_FLAG_DELETE可以传入正常的值1.

而这个delete和deleteByGenTableId又是在GenTableService.java中被同时触发的: @Transactional(readOnly = false) public void delete(GenTable genTable) { genTableDao.delete(genTable); genTableColumnDao.deleteByGenTableId(genTable.getId()); }

所以我就不知道这个问题出在哪里了.劳烦大神帮我看看这个问题应该怎么解决?


ps:这里好像没有附件引用,如果需要log我再另发把,谢谢了. ps:没找到同步github的方法,该issue我手工同步一下,处理结束后手工再手工删除把.

hizhengfu commented 9 years ago

删除表的时候也遇到这个问题,修改GenTableColumnDao.xml

UPDATE gen_table_column SET del_flag = #{DEL_FLAG_DELETE} WHERE gen_table_id = #{id}

修改GenTableService中的

public void delete(GenTable genTable) { genTableDao.delete(genTable); genTableColumnDao.deleteByGenTableId(genTable); }

再修改genTableColumnDao中的为public void deleteByGenTableId(GenTable genTable);

发生错误是因为找不到这个DEL_FLAG_DELETE常量