2012-05-22 47 views
0

我有这样的事情:Grails的映射字符串为nvarchar

字符串的StatusCode

,并在映射我有:

的StatusCode列: 'status_cd',输入: 'NVARCHAR'

我试着'varchar','VARCHAR'和'nvarchar' 我一直收到

org.springframework.beans.factory.BeanCreationException:错误 使用名称'transactionManagerPostProcessor'创建bean:
Bean初始化失败;嵌套的异常是
org.springframework.beans.factory.BeanCreationException:错误 创建名为'transactionManager'的bean:在设置bean属性'sessionFactory'时无法将参考 解析为bean'sessionFactory'; 嵌套的异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为'sessionFactory'的bean:调用init方法 失败;嵌套异常是org.hibernate.MappingException:不能 确定类型为:NVARCHAR,在表中:CARD,对于列: [org.hibernate.mapping.Column(status_cd)]
at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303)
在java.util.concurrent.FutureTask.run(FutureTask.java:138)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908)
在java.lang.Thread.run(Thread.java:619)

任何想法我可能会在映射中丢失? 我正在使用grails 2.0和MS SQL

+1

只是固定它,而不是类型,我不得不使用sqlType:'nvarchar' – John

回答

1

假设“type:”等价于Hibernate如何使用该术语,那么问题在于该类型需要引用Hibernate映射类型。也就是说,type既不是java类型,也不是sql类型。它是一个理解两者之间映射关系的Hibernate概念。国外化的字符串支持在Hibernate开箱即用(计划为5.0)中尚不存在。但它很容易添加。

首先,您需要定义Sting和NVARCHAR之间的Hibernate映射类型。您可以通过实现UserType或扩展其中一种内置Hibernate映射类型(org.hibernate.type.StringType可能是一个很好的起点)来实现此目的。

然后您在映射中指定该实现。

1

史蒂夫埃伯索尔是正确的,所以我可以添加:

设定您映射'sqlType',尝试sqlType: "nvarchar", length: 255 ... Hibernate type,键入:“文本”默认为varchar