データ型 ANYDATA の 1 つの列を含む (他のいくつかの列の中で) Oracle テーブルへの単純な Groovy & Grails インターフェイスを作成しようとしています。(私はG&Gに不慣れなので、ご容赦ください。)
ドメイン クラスを使用すると、列を sqltype "sys.anydata" に簡単にマップできますが、コントローラーはこれを処理できないようです。典型的なエラーが発生します: ORA-00932: inconsistent datatypes: expected CHAR got CHAR
Oracle の anydata 列を扱うのは難しい場合があるので、これは驚くことではありません。
まず、挿入を成功させるために文字列を ANYDATA に変換するには、コントローラーの保存メソッドをオーバーライドする必要があると思います。ここからどこから始めればよいかわかりません...通常、Oracle SQLでは次のようなものを使用します。
mytable (id, anydatacol) 値 (1, sys.anyData.convertVarchar2('mystring')) に INSERT
INSERT SQL で、anydata に挿入された文字列を取得します。
既定の保存メソッドの代わりに、上記のように (フィールドでいくつかの関数を使用して) 挿入するようにコントローラーをカスタマイズするにはどうすればよいですか?
grails と anydata の実例を見たいのですが、grails で anydata をどこまで使用できるかに関係なく、上記のようなコントローラーをカスタマイズする方法に興味があります。
とても参考になりそうです、ありがとうございます!
いくつかの進歩を遂げています。すべてがコンパイルされますが、run-app を実行すると次のようになります。
Running Grails application
| Error 2013-10-17 22:33:29,123 [startStop-1] ERROR hbm2ddl.SchemaUpdate - could not complete schema update
Message: No Dialect mapping for JDBC type: 2002
Line | Method
->> 262 | run in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run in java.lang.Thread
| Server running. Browse to
私のデータベースはOracle 11gです。方言org.hibernate.dialect.Oracle10gDialectを使用しています... 11も試してみましたが、同じエラーがスローされます。
カスタムユーザータイプを使用するために必要な他の設定はありますか? あなたが投稿したリンクから、クラスを作成しました。それに加えて、私のクラスは次のようになります。
class Anytest {
String name
AnyScalarData anytdat
static mapping = {
table 'ANYTDAT'
anytdat type:AnyScalarData, sqltype: "sys.anydata"
}
static constraints = {
name(blank:false)
anytdat(nullable:true)
}
}
編集:
Config.groovy を次のように更新しました。
grails.gorm.default.mapping = { 'ユーザータイプ'( type:AnyScalarDataUserType, class:AnyScalarData )}
しかし、今取得:
Running Grails application
| Error 2013-10-17 23:01:27,441 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: 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.codehaus.groovy.grails.exceptions.GrailsDomainException: Error evaluating ORM mappings block for domain [anydata_01.Anytest]: No such property: AnyScalarDataUserType for class: org.codehaus.groovy.grails.orm.hibernate.cfg.HibernateMappingBuilder
Message: 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.codehaus.groovy.grails.exceptions.GrailsDomainException: Error evaluating ORM mappings block for domain [anydata_01.Anytest]: No such property: AnyScalarDataUserType for class: org.codehaus.groovy.grails.orm.hibernate.cfg.HibernateMappingBuilder
Line | Method
->> 262 | run in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run in java.lang.Thread
Caused by 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.codehaus.groovy.grails.exceptions.GrailsDomainException: Error evaluating ORM mappings block for domain [anydata_01.Anytest]: No such property: AnyScalarDataUserType for class: org.codehaus.groovy.grails.orm.hibernate.cfg.HibernateMappingBuilder
->> 262 | run in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -