我目前正在尝试在 Grails 中保存与域模型关联的数字列表,但我不断收到错误消息。所以场景是:
我有一个如下所示的客户端域模型,它与下面显示的 PhoneNumbers 域模型具有 HasMany 关系。有一个视图,其中添加了一堆数字,然后将它们存储在 String [] 中以便在控制器上进行处理。
客户域:
class Client {
String name
List numbers = new ArrayList()
//This represents a message belonging to a single department
static hasMany = [numbers:PhoneNumbers]
static constraints = {
name(blank:false)
}
}
电话号码域:
class PhoneNumbers {
String number
//This represents a message belonging to a single department
static belongsTo = [client:Client]
static constraints = {
number(blank:false)
}
}
如您所见,客户有许多电话号码,并且电话号码属于一个客户。所以在我的控制器中,我假设我需要做的就是将这些数字传递给数组或列表中的域,它会处理级联保存,我的控制器功能如下:
//This is an array of phone numbers stored in a sesson object as String []
def numbers = session.getAttribute("phoneNumbers")
def numbersConvert = numbers as List
def client = new Client(numbers: numbersConvert, name: params.name)
if (!client.save()) {
client.errors.each{
println(it)
}
}
因此,我希望上面的控制器获取我已确认具有值的数字数组,然后将其转换为列表。然后保存新的客户端数据并级联保存该客户端在列表中的所有号码。但是,这不起作用,我收到以下错误:
GRAILS-7799: Subtype 'java.lang.String' of reloadable type com.tool.PhoneNumbers is not reloadable: may not see changes reloaded in this hierarchy (please comment on that jira)
| Error 2013-07-30 07:56:50,831 [http-bio-8080-exec-4] ERROR property.BasicPropertyAccessor - IllegalArgumentException in class: com.smstool.PhoneNumbers, getter method of property: id
| Error 2013-07-30 07:56:50,836 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver - IllegalArgumentException occurred when processing
object is not an instance of declaring class. Stacktrace follows:
Message: object is not an instance of declaring class
我也尝试了另一种方法来保存控制器中的数据,如下所示,但这也不起作用:
numbers.each{
def phoneNumber = new PhoneNumber(number: it).save(flush: true)
client.addToPhoneNumber(phoneNumber).save(flush: true)
}
我想我错过了一些愚蠢的事情,这可能是一件非常容易做的事情,只是太累了,需要一点帮助。
提前致谢