Hibernate grails自定义GORM方言阻止';grails shell';工作-类路径之谜

Hibernate grails自定义GORM方言阻止';grails shell';工作-类路径之谜,hibernate,grails,gorm,Hibernate,Grails,Gorm,我正在使用Grails2.3.11 我的域类使用UUID作为标识符,以二进制(16)形式存储在MySQL中。我为Hibernate使用了一种非常简单的自定义方言,并将其放在src/java中: class CustomMysqlDialect extends MySQL5InnoDBDialect { public CustomMysqlDialect() { super(); registerColumnType(Types.BINARY,"binary(16)");

我正在使用Grails2.3.11

我的域类使用UUID作为标识符,以二进制(16)形式存储在MySQL中。我为Hibernate使用了一种非常简单的自定义方言,并将其放在src/java中:

class CustomMysqlDialect extends MySQL5InnoDBDialect {
  public CustomMysqlDialect() {
    super();
    registerColumnType(Types.BINARY,"binary(16)");
  }
}
然后在域类中,我可以使用

static mapping = {
    id generator: 'uuid2',sqlType:'BINARY(16)'
...
}
除了
grailsshell
命令之外,所有这些都可以正常工作:

± |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中,但它没有改变任何东西


有什么想法吗?

这对我来说很有效。如果在启动shell之前运行
grailsclean
grailscompile
,会有帮助吗?还可以尝试将
--verbose--stacktrace
添加到
编译
shell
命令中-您可能缺少警告或错误消息:

$ grails clean
$ grails compile --verbose --stacktrace
$ grails shell --verbose --stacktrace

请注意,
grails-app/utils
的名称有误导性。它不是用于实用程序类,而是用于编解码器。将所有非grails应用程序工件(控制器、服务、编解码器等)的Groovy和Java代码放入
src/Groovy
src/Java
中,谢谢@Burt!groovy默认将类公开,但我忘记了将这个java类公开!您的提示帮助找到了异常的根本原因:由以下原因引起:java.lang.IllegalAccessException:Class org.hibernate.dialent.resolver.dialentfacture无法访问sun.reflect.Reflection.Ensuremberaccess(Reflection.java:65)上带有修饰符“”的CustomMySqlDialent类的成员…org.hibernate.dialoge.resolver.dialogFactory.ConstructDialogue(dialogFactory.java:156)。。。371更多现在你知道为什么
runapp
脚本可以很好地与原始类一起工作,而
shell
不能工作了吗?