gpt4 book ai didi

唯一/保存/更新的Grails问题

转载 作者:行者123 更新时间:2023-12-02 15:03:14 30 4
gpt4 key购买 nike

我遇到了 grails 的问题。我有一个看起来像这样的域:

class Book {

static belongsTo = Author

String toString() { title }

Author bookAuthor
String title
String currentPage


static constraints = {
bookAuthor()
title(unique:true)
currentPage()

}
}

主要要注意的是我有 标题(唯一:真)以避免将同一本书添加两次。但是,这会导致问题。在我创建的 Controller 中:
def populate = {

def bookInstance = new Book()

def dir = 'C:/currentBooks.txt'
def bookList

bookList = readFile(dir) //read file and push values into bookList

int numOfBooks = bookList.size()

numOfBooks.times {

bookInstance.setBookAuthor(bookList.author[it])
bookInstance.setTitle(bookList.title[it])
bookInstance.setCurrentPage(bookList.title[it])
bookInstance.save()
}

}

我调用填充来读取文件并用新书填充数据库。问题是我想用新值更新它。例如,假设这本书已经存在于数据库中,但我已经深入阅读了这本书并想要更改 currentPage 以便在文件中更改数据并调用 populate 但不更新页面,因为标题已经存在。

有人可以解释如何用新值更新结果吗?

最佳答案

首先,您需要一个 Book 域对象的键。您将标题标记为唯一,这表明您希望使用它来唯一标识一本书。我建议不要这样做(当两本书具有相同的标题时会发生什么?)并默认使用 grails 提供的 id。这意味着您必须将 id 存储在您的 currentBooks.txt 中。除了你的其他领域。

获得 id 后,您可以尝试从数据库中加载现有记录。如果没有,请创建一个新的。例如:

def dir = 'C:/currentBooks.txt'
def bookList

bookList = readFile(dir) //read file and push values into bookList

int numOfBooks = bookList.size()

numOfBooks.times {

def bookInstance.get(bookList.id[it])
if (!bookInstance) {
bookInstance = new Book()
}

bookInstance.setBookAuthor(bookList.author[it])
bookInstance.setTitle(bookList.title[it])
bookInstance.setCurrentPage(bookList.title[it])
bookInstance.save()
}

或者,您可以使用标题作为 id。如上所述,这是一个坏主意,但它不必跟踪单独的 id 并更改 currentBooks.txt 的格式。 .使用如下定义的 Book,您可以调用 Book.get(bookList.title[it]) :
class Book {

static belongsTo = Author

String toString() { title }

Author bookAuthor
String title
String currentPage

static constraints = {
bookAuthor()
title(unique:true)
currentPage()
}

static mapping = {
id name: 'title', generator: 'assigned'
}
}

关于唯一/保存/更新的Grails问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550277/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com