我正在使用Grails 2.3.11。
我的域类使用UUID作为MySQL中存储为二进制(16)的标识符。我在Hibernate中使用了一个非常简单的自定义方言,并将其放在src / java:
中class CustomMysqlDialect extends MySQL5InnoDBDialect {
public CustomMysqlDialect() {
super();
registerColumnType(Types.BINARY,"binary(16)");
}
}
然后在域类中我可以使用
static mapping = {
id generator: 'uuid2',sqlType:'BINARY(16)'
...
}
除grails shell
命令外,所有这些工作正常:
± |binary-uuid ✗| → grails shell
| Packaging Grails application.....
| Error Error executing script Shell:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'transactionManagerPostProcessor': Initialization of bean failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean
property 'sessionFactory'; nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'sessionFactory': Invocation of init method failed; nested exception is
org.hibernate.HibernateException: Could not instantiate dialect class (Use --stacktrace to see
the full trace)
就像src / java中的类不会被添加到类路径中一样。
grails控制台工作正常,我可以轻松查询/创建/更新我的域类,但我真的很想念shell的交互性......
我也尝试将这个类放在grails-app / utils中,但它没有改变任何东西......
有什么想法吗?
答案 0 :(得分:2)
这对我来说很好。在启动shell之前运行grails clean
和grails compile
会有帮助吗?另请尝试将--verbose --stacktrace
添加到compile
和shell
命令中 - 您可能会错过警告或错误消息:
$ grails clean
$ grails compile --verbose --stacktrace
$ grails shell --verbose --stacktrace
请注意,grails-app/utils
具有误导性名称。它不适用于实用程序类,它适用于编解码器。将所有不是grails-app工件的Groovy和Java代码(控制器,服务,编解码器等)放在src/groovy
和src/java
中。