0

Student が User を拡張する学生 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

reserved1.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)
4

1 に答える 1

1

上記のコード例がどれほど完全かはわかりませんが、表示されている例外を引き起こしている可能性がある、またはしていない可能性があるいくつかのことがわかります。

  1. def securityService(Reservation で) 一時的なものにする必要があるため、gorm は永続化を試みません。ところで-springSecurityServiceのことですか
  2. 更新: それらを文字列として宣言したことを認識してください。日付をそのように直接設定することはできないと思います。たとえば、文字列を解析する必要がありますDate().parse("yyyy-MM-dd", '2013-07-23'))
  3. GORM autoTimestampを使用している場合、lastUpdatedフィールドはStringではなくDateである必要があります。それ以外の場合は、使用しない場合は無効にする必要があります
  4. String reservationId最後に、Reservation はレガシー データベースにマップされていますか? GORM によって提供されるデフォルト IDと比較する理由はありますか
于 2013-07-22T20:10:33.883 に答える