Spring Boot JPA(HSQLDB):INSERT嵌套SELECT报unexpected token: SELECT错误
解决HSQLDB中关联表INSERT嵌套SELECT的语法错误问题
HSQLDB不支持在VALUES子句中嵌套SELECT语句获取值,这是你遇到unexpected token: SELECT错误的核心原因。必须改用INSERT...SELECT的语法直接从查询结果插入关联数据。
正确写法示例
单组角色-权限关联插入
INSERT INTO ROLE_AUTHORITY_MAPPING (ROLE_ID, AUTHORITY_ID) SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a WHERE r.ROLE_NAME = 'ADMIN' AND a.AUTHORITY_NAME = 'USER_MANAGE';
多组角色-权限关联批量插入
如果需要一次性插入多组关联关系,可以用UNION ALL拼接多个查询:
INSERT INTO ROLE_AUTHORITY_MAPPING (ROLE_ID, AUTHORITY_ID) -- 管理员拥有用户管理权限 SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a WHERE r.ROLE_NAME = 'ADMIN' AND a.AUTHORITY_NAME = 'USER_MANAGE' UNION ALL -- 管理员拥有帖子创建权限 SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a WHERE r.ROLE_NAME = 'ADMIN' AND a.AUTHORITY_NAME = 'POST_CREATE' UNION ALL -- 普通用户拥有帖子查看权限 SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a WHERE r.ROLE_NAME = 'USER' AND a.AUTHORITY_NAME = 'POST_VIEW';
关键说明
- 确保
SECURITY_ROLES和SECURITY_AUTHORITIES表中已经存在对应的初始化数据(通过之前的INSERT语句插入),否则SELECT会返回空结果,关联表不会插入数据。 - 如果你的HSQLDB版本较低(低于2.0),建议升级到2.5+版本以获得更好的SQL语法兼容性。
内容的提问来源于stack exchange,提问作者joseluisbz
相关产品推荐
相关产品推荐

