私はgrailsアプリケーションを実行していますが、おそらくこれまでに遭遇した中で最も奇妙なエラーを受け取ります。モデル内の1つの「フィールド」は、理由もなく消えるだけのデータを取得しました。
プロジェクトに2つのModelクラスまたはDomainクラスがあり、次のように設定されています。
class Insertion {
String title
Date insertDate
static hasMany = Dataholder
static constraints = {
title(unique: true)
}
}
class Dataholder {
String product
int somenumber
int somenumber2
int somenumber3
Date startDate
Date endDate
List<String> somedatalist
Insertion insertions
static belongsTo = Insertion
static constraints = {
}
}
「挿入」クラスは、ユーザーが一連のデータホルダーを入力するたびに表されます。データホルダーは、その特定の製品のすべてのデータを表します。知っておくべき重要なことは、消えるデータはデータホルダーモデルに含まれており、消えるデータは。だけであるということsomedatalist
です。
これは、データを挿入して保存するときに完全に混乱する魔法です。それはすべてうまくいきます:
if (!errors) {
dataholderValidator.each {
it.insertion = insertion
it.save()
}
def results = Dataholder.findAllByInsertion(insertion)
検証を行い、すべてのデータホルダーにデータを適用します。すべてがうまくいけば、if(!errors)
各オブジェクトに挿入を追加します。その後、各オブジェクトを保存し、データをデータベースに保存します。ここではうまくいかないと思うかもしれませんが、ただ待って驚いてください。
保存後、挿入を使用して、データベースからすべてのデータホルダーを取得します(データをユーザーに印刷する前に、データが保存されていることを確認したいため)。これは奇妙な部分が始まるところです、私が返すのは正しいデータです:
results.each {
it.somedatalist.each { it2 ->
if(!weekdays.contains(it2))
weekdays.add(it2)
}
}
データリストのすべての一意のアイテムを配列に入力します。次に、それをビューと出来上がりに印刷します。
ここで、ユーザーがビュー内のすべてのデータを確認するのを待つだけです。ユーザーが確認ボタンをクリックすると、挿入タイトルがpost to functionとともに送信され、データが取得されます。驚いたことに、これsomedatalist
はnullです。
これは、データを取得する機能です。
def result = Insertion.findByTitle(insertionTitle)
def results = Dataholder.findAllByInsertions(result)
後にブレークポイントを置くとき、私は確かに、に等しいものを除いて、すべてが正しい正しいデータを含んresults
でいることを確認することができます。Dataholder
somedatalist
null
オブジェクトを使用するだけでなく、挿入タイトルを使用して上記のデータを取得しようとしましたが、うまく機能します。データが1秒でデータベースに入力される理由と、何かが消えてしまう理由がわかりません。
テスト:
void testSaveDataholder() {
Insertions insertion = new Insertion(title: 'adadad', insertDate: new Date())
insertion.save()
assert Insertion.all.size() == 1
Dataholder ed = new Dataholder(product: 'abc123', somenumber: 123, somenumber2: 13, startDate: new Date(), endDate: new Date(), somedatalist: ['TI'], insertions: insertion)
ed.save()
assert Dataholder.all.size() == 1
assert Dataholder.all.first().somedatalist.size() == 1
assert Dataholder.all.first().insertions.title == 'adadad'
assert Insertion.findAllByTitle('adadad').size() == 1
assert Dataholder.findAllByInsertions(Insertion.all.first()).size() == 1
}
このテストはすべてtrueを返します。私は、Grails2.1を使用しています。
編集:構成として「更新」を使用してインメモリデータベースを使用しています。そのため、実際にデータを表示することはできません。しかし、それはそこにあるはずです。
あなたの賢者のアドバイスとより良い知恵で私を助けてください。