2017-12-31 31 views
0

私はGrailsの3.2.11から3.3.2に移行し、奇妙な問題に直面してきた:ドメインクラスがグルーヴィー/メインのsrc /からクラスから継承する場合のGrails 3.3.2ドメインクラスの継承問題

を - それはです初めて作成され、DBに適切に保存されます。しかし、DBから取得して継承されたプロパティを更新しようとすると、DBには戻されません。

例:

abstract class AbstractTest { 
    String field 
} 

class Test extends AbstractTest { 

    static constraints = { 
    } 
} 

あなたはGrailsの中で次のスクリプトを実行した場合、それは正しい値を表示しますが、あなたはDBを確認する場合は、コンソール - (作成時に設定)古い値が格納されます。

'ルート'、ノーパス

import testapp.Test 

new Test(field: 'original').save(flush: true) 
Test test = Test.list().find() 
println test.properties 
test.field = 'modified' 
println test.save(flush: true) 
test = Test.list().find() 
println test.properties 

https://github.com/ahlinist/testGorm

私はMySQLを使用して、ログインを参照してください。

JDBCログ(logSql:true)は、更新クエリがDBに送信されないが、メモリ内の状態(例: Test.list()*。properties)は、継承されたプロパティが正常に更新されたかのように機能します。

祖先のプロパティの更新は3.2.11で正常に機能しました。ドキュメントで回答が見つかりませんでした。私は何が欠けていますか?

+0

grails.gorm @ grails.gorm.blah – injecteer

+0

からEntity' @ 'を使って抽象クラスに注釈を試してみてください。

はPSのマニュアルを参照してください。 annotation.Entityは抽象クラスを別のDBテーブルを持つ永続エンティティにしました。 additinal DBテーブルを持たない継承階層に参加するには、抽象クラスが必要です。 –

答えて

0

@ grails.gorm.dirty.checking.DirtyCheckを抽象クラスに追加すると、問題が解決しました。 GORM upgrade notes1.2.13抽象基底クラスセクションのチェックダーティ。)