我目前正在尝试保存与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)
}
}
所以上面的控制器我希望得到我已经确认的数字数组,然后将其转换为List。然后保存新的客户端数据并级联保存该客户端在列表中的所有数字。但是这不起作用,我得到以下错误:
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)
}
我认为我错过了一些愚蠢的事情,这可能是一件非常容易的事情,只是这么累,需要一些帮助。
提前致谢