数据从数据库中消失了?

时间:2012-09-06 08:43:22

标签: grails

我正在运行grails应用程序,我收到了我可能遇到过的最奇怪的错误。模型中的一个“字段”获得的数据无缘无故地消失。

我的项目中有两个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 = {
    }
}

“插入”类表示每次用户可能输入一堆数据持有者。数据持有者代表该特定产品的所有数据。重要的是要知道,消失的数据包含在Dataholder模型中,消失的 ONLY 数据是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)
                }
            }

使用数据列表中的所有唯一项填充数组。然后将其打印到视图中,然后瞧:

the view with correct data

现在,我们只是等待用户确认视图中的所有数据,当他或她点击确认按钮时,插入标题将发送到post to function,这将检索数据,令我惊讶{{ {1}}为空。

这是检索数据的功能:

somedatalist

def result = Insertion.findByTitle(insertionTitle) def results = Dataholder.findAllByInsertions(result) 之后设置断点时,我可以确定每个results包含正确的正确数据,但Dataholder等于somedatalist。< / p>

我尝试使用“插入标题”而不是仅使用对象来获取上述数据,并且效果很好。我无法理解为什么数据会在一秒内填充到数据库中,以及某些东西可能会消失?

测试:

null

此测试全部返回true,我使用的是Grails 2.1。

编辑:我使用内存数据库并将“更新”作为配置。所以我无法真正查看数据。但它应该在那里。

请帮助我提供你的圣人建议和更好的智慧。

1 个答案:

答案 0 :(得分:3)

它刚出现在我的脑海里。将对象集合保持为单个列会破坏第一个正常形式,因此这不是正确的方法。我立即在JIRA中搜索了一个问题:

http://jira.grails.org/browse/GRAILS-1023

正确的方法是使用单个String属性创建一个新的域类,并使用标准的一对多关系。