【问题标题】:GORM Composition save error, Could not find matching constructor for: java.lang.String(java.lang.Long)GORM 组合保存错误,找不到匹配的构造函数:java.lang.String(java.lang.Long)
【发布时间】:2013-07-22 19:54:19
【问题描述】:

我正在尝试保存具有学生 ID 的预订,其中学生扩展了用户。

保存时出现“找不到 java.lang.String(java.lang.Long) 的匹配构造函数错误”。

据我所知,它尝试发送的 Long 是 Student 对象的唯一 ID。我找不到解决方法,这是我的代码。

 class User {
   static hasMany = [reservations:Reservation, students:Student, faculty:Faculty]

   String username
   String password
   String firstName
   String lastName
   String phoneNumber
   String emailAddress
   boolean enabled
   boolean accountExpired
   boolean accountLocked
   boolean passwordExpired



 class Student extends User{
     static belongsTo = [users:User]
     static hasMany = [reservations:Reservation]

     String studentId

 class Reservation {    
     def securityService
     Student student
     String reservationId
     String lastUpdated
     String lastUpdatedBy
     String startDate
     String endDate

当我使用 reservation1.save() 时出现错误:

Message: Could not find matching constructor for: java.lang.String(java.lang.Long)

这是我要保存的数据

//UserData
def user1 = Student.findByUsername('bobby') ?: new Student(username: 'bobby',
    enabled: true, password: 'pass', firstName: 'robert', lastName:'plant',
    metroStateStudentId: '012345670', phoneNumber: '0123456789',

//Reservation Data
def reservation1 = Reservation.findByReservationId('123456') ?: new   Reservation(reservationId:'123456',
    student: user1,startDate:'2013-07-23', endDate:'2013-07-27',lastUpdatedBy:'bobby')
    reservation1.save(flush: true, failOnError: true)

【问题讨论】:

    标签: grails groovy grails-orm composition


    【解决方案1】:

    不确定您上面的示例代码有多完整,但我看到了一些可能会或可能不会导致您看到的异常的事情。

    1. def securityService(在预订中)应该是暂时的,所以 gorm 不会尝试持续存在。顺便说一句 - 你的意思是 springSecurityService
    2. 更新:只要意识到你已经将它们声明为字符串 我认为你不能直接这样设置日期,你需要解析字符串 例如Date().parse("yyyy-MM-dd", '2013-07-23'))
    3. 如果您使用 GORM autoTimestamplastUpdated 字段应该是 Date 而不是 String - 否则,如果您不使用,则应该禁用它它
    4. 最后,Reservation 是否映射到旧数据库 - 是否有理由让 String reservationId 与 GORM 提供的默认 ID 对比?

    【讨论】:

    • 感谢您的回复,我使用了您对 sercurityService 和 Date 的建议。我将使用 MySQL 数据库。我是GORM新手,想了想,可以使用默认id,省略reservationId。
    • 顺便说一句 - 你是说 springSecurityService 吗?
    • 我正在玩弄它并试图让我的 lastUpdatedBy 字段与 lastUpdatedBy = securityService.currentAuthenticatedUsername() 一起使用
    • 我摆脱了registrationId,现在在保存之前正在执行findById('1')。我运行了我的程序,它成功地保存了一个包含反映 user1 id 的 Student_id 列的预订。谢谢你的建议。
    猜你喜欢
    • 2022-01-09
    • 2016-01-26
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多