我正在运行一个 grails 应用程序,并且收到了我可能遇到过的最奇怪的错误。模型中的一个“字段”获得了无缘无故消失的数据。
我的项目中有两个模型或域类,设置如下:
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 = {
}
}
“插入”类代表用户每次可能输入一堆数据持有者。数据持有者代表该特定产品的所有数据。重要的是要知道消失的数据包含在 Dataholder 模型中,唯一消失的数据是somedatalist
.
当我插入数据并保存它时,这是完全令人困惑的魔法。一切顺利:
if (!errors) {
dataholderValidator.each {
it.insertion = insertion
it.save()
}
def results = Dataholder.findAllByInsertion(insertion)
我做了一些验证并将数据应用到每个 Dataholder,然后如果一切顺利,if(!errors)
我将插入添加到每个对象。完成后,我保存每个对象,将数据保存到数据库中。您可能认为这里出了问题,但请等待并感到惊讶。
保存后,我通过使用插入从数据库中获取所有数据持有者(因为我想确保在将数据打印给用户之前已保存数据)。这是奇怪的部分开始的地方,我得到的是正确的数据:
results.each {
it.somedatalist.each { it2 ->
if(!weekdays.contains(it2))
weekdays.add(it2)
}
}
使用数据列表中的所有唯一项填充数组。然后将其打印到视图中,瞧:
现在,我们只需等待用户确认视图中的所有数据,当他或她单击确认按钮时,插入标题会随 post 一起发送到函数,该函数将检索数据,令我惊讶的是,somedatalist
它是 null。
这是检索数据的功能:
def result = Insertion.findByTitle(insertionTitle)
def results = Dataholder.findAllByInsertions(result)
results
当在我可以肯定地确认每个Dataholder
包含正确的正确数据之后放置一个断点时,除了somedatalist
等于null
.
我试图通过使用插入标题而不是仅使用对象来获取上面的数据,并且效果很好。我不明白为什么数据会在一秒钟内填充到数据库中,以及某些东西怎么会消失?
测试:
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,我使用的是 Grails 2.1。
编辑:我正在使用带有“更新”的内存数据库作为配置。所以我无法真正查看数据。但它应该在那里。
请用你的睿智建议和更好的智慧帮助我。