Grails 2 - Unable to create spring security domain object

I installed the spring security application from the th grails plugin page after running grails s2-quickstart com.testApplication.secureApplication User Role to automatically create the domain object that I made grails run-app and received this exception:

 |Loading Grails 2.3.4 |Configuring classpath . |Environment set to development ................................. |Packaging Grails application Precompiling AST Transformations ... src C:\Users\GrailsWorkspace\testApplication\target\work\plugins\postgresql-extensions-0.6.1 C:\Users\GrailsWorkspace\testApplication\target\classes Done precompiling AST Transformations! .. |Compiling 3 source files ................................................... |Running Grails application Configuring Spring Security Core ... ... finished configuring Spring Security Core Error | 2013-12-15 15:42:45,635 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - Unsuccessful: create table user (id int8 not null, version int8 not null, account_expired bool not null, account_locked bool not null, enabled bool not null, "password" varchar(255) not null, password_expired bool not null, username varchar(255) not null unique, primary key (id)) Error | 2013-12-15 15:42:45,638 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - ERROR: syntax error at "user" Position: 14 Error | 2013-12-15 15:42:45,688 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - Unsuccessful: alter table user_role add constraint FK143BF46A1E03E05D foreign key (user_id) references user Error | 2013-12-15 15:42:45,688 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - ERROR: syntax error at "user" Position: 90 |Server running. 

The fact is that my database is configured correctly, because I get the role and user_role . However, the user is not getting generation in my postgresql db . My implementation of my auto-generated user domain object looks like this:

 class User { transient springSecurityService String username String password boolean enabled = true boolean accountExpired boolean accountLocked boolean passwordExpired static transients = ['springSecurityService'] static constraints = { username blank: false, unique: true password blank: false } static mapping = { password column: '`password`' } Set<Role> getAuthorities() { UserRole.findAllByUser(this).collect { it.role } as Set } def beforeInsert() { encodePassword() } def beforeUpdate() { if (isDirty('password')) { encodePassword() } } protected void encodePassword() { password = springSecurityService.encodePassword(password) } } 

I appreciate your answer!

+7
spring postgresql grails
source share
2 answers

'user' is a reserved name in Postgres. You can avoid this by setting the mapping in your domain class and use an alternate name.

  static mapping = { table 'myusers' } 

Thus, your domain class remains the same. You can also avoid a name similar to how you did it with a "password."

+9
source share

In the user domain, add the following mapping configuration to save the user domain / table name in the same way as the password column runs.

 static mapping = { table '`user`' password column: '`password`' } 

Blog post explaining the problem and solution can be found here.

+1
source share

All Articles