简体   繁体   English

Grails将String映射到nvarchar

[英]Grails mapping String to nvarchar

I have something like this: 我有这样的事情:

String statusCode 字符串statusCode

and in the mapping I have: 在我的映射中:

statusCode column: 'status_cd', type: 'NVARCHAR' statusCode列:'status_cd',输入:'NVARCHAR'

I have tried with 'varchar', 'VARCHAR' and 'nvarchar' I keep receiving 我试过'varchar','VARCHAR'和'nvarchar'我一直在接受

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': org.springframework.beans.factory.BeanCreationException:创建名为'transactionManagerPostProcessor'的bean时出错:
Initialization of bean failed; bean的初始化失败; 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'; org.springframework.beans.factory.BeanCreationException:创建名为'transactionManager'的bean时出错:在设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:init方法的调用失败; nested exception is org.hibernate.MappingException: Could not determine type for: NVARCHAR, at table: CARD, for columns: [org.hibernate.mapping.Column(status_cd)] 嵌套异常是org.hibernate.MappingException:无法确定类型:NVARCHAR,在表:CARD,对于列:[org.hibernate.mapping.Column(status_cd)]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 在java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619) 在java.lang.Thread.run(Thread.java:619)

Any idea what I may be missing in the mapping ? 知道我在映射中可能缺少什么吗? I am using grails 2.0 and MS SQL 我正在使用grails 2.0和MS SQL

Assuming "type: " there is equivalent to how Hibernate uses that term, then the problem is that type needs to refer to a Hibernate mapping type. 假设“type:”相当于Hibernate如何使用该术语,那么问题是类型需要引用Hibernate映射类型。 That is to say, type is neither a java type nor a sql type. 也就是说,type既不是java类型也不是sql类型。 Its a Hibernate concept that understands the mapping between the two. 它是一个Hibernate概念,可以理解两者之间的映射。 Nationalized string support does not exist yet in Hibernate out-of-the-box (planned for 5.0). Hibernate开箱即用(计划用于5.0)尚不存在国家化字符串支持。 But its pretty easy to add. 但它很容易添加。

First, you will need to define a Hibernate mapping type between Sting and NVARCHAR. 首先,您需要在Sting和NVARCHAR之间定义Hibernate映射类型。 You can accomplish this by either implementing a UserType or by extending one of the built-in Hibernate mapping types (org.hibernate.type.StringType would probably be a good starting point). 您可以通过实现UserType或扩展其中一个内置的Hibernate映射类型来实现这一点(org.hibernate.type.StringType可能是一个很好的起点)。

Then you name that implementation in your mapping. 然后在映射中命名该实现。

Steve Ebersole is right so I can add: Steve Ebersole是对的,所以我可以补充:

Set in you mapping a 'sqlType' , try sqlType: "nvarchar", length: 255 ... Hibernate type , type: 'text' defaults to varchar 在映射'sqlType'时设置 ,尝试sqlType: "nvarchar", length: 255 ... Hibernate类型 ,类型:'text'默认为varchar

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM