2015-02-04 2 views
1

Я работаю над простым проектом grails, когда у меня возникла проблема. Я провел много исследований, но я не нашел правильного ответа.Ошибка при загрузке диспетчера плагинов в Grails/Groovy

Дело в том, у меня есть 3 класса домена, а именно инвентаризации, Пользователь и Movement и отношения между ними является один-ко-многим для Inventory и движение и то же самое для Пользователь и Движение so Движение в значительной степени посередине. Мне удалось хорошо подключить Inventory and Movement, но другие отношения показывают ошибку ниже.

Error | 
Error loading plugin manager: Property [movements] in class [classcom.inventory.User] is a 
bidirectional one-to-many with two possible properties on the inverse side. 
Either name one of the properties on other side of the relationship [user] or use the 
'mappedBy' static to define the property that the relationship is mapped with. 
Example: static mappedBy = [movements:'myprop'] (Use--stacktrace to see the full trace) 
| Error Forked Grails VM exited with error 

Это мои классы домена:

пользователей:

class User { 

    String userID 
    String fullName 
    String position 
    Department department 

    String toString(){ 
     fullName 
    } 

    static hasMany = [inventories: Inventory, movements: Movement] 

    static constraints = { 
     userID blank: false, unique: true 
     fullName blank: false 
     position() 
     department() 
     movements nullable: true 
    } 
} 

Движение:

class Movement { 

    User oldUser 
    User newUser 
    Inventory inventoryID 
    Date movementDate 
    User userResponsible 

    //static belongsTo = User 

    static constraints = { 
     inventoryID blank: false 
     oldUser blank: false 
     newUser blank: false 
     movementDate() 
     userResponsible blank: false 
    } 
} 

Inventory:

class Inventory { 

    String inventoryID 
    String code 
    String description 
    String serial_num 
    Date purchase_date 
    byte[] image 
    Date record_date 
    String remarks 
    Type type 
    Brand brand 
    User user 


    static hasMany = [movements: Movement] 

    String toString(){ 
     "$inventoryID, $type" 
    } 

    static constraints = { 
     inventoryID blank: false, unique: true 
     code blank: false 
     description nullable: true, maxSize: 1000 
     serial_num blank: false 
     purchase_date() 
     image nullable: true, maxSize: 1000000 
     record_date() 
     remarks nullable: true, maxSize: 1000 
     type() 
     brand() 
     user() 
    } 
} 

Любая идея, как решить ошибку .. ??

ответ

2

Проблема в том, что gorm не может отличить newUser и oldUser от вашего класса Movements. Попробуйте добавить раздел mappedBy и добавить другую часть в вашу собственность hasMany к классу пользователя, ниже приведен пример, который должен работать:

class User { 

    String userID 
    String fullName 
    String position 
    Department department 

    String toString(){ 
     fullName 
    } 

    static hasMany = [inventories: Inventory, movementsByOldUser: Movement, movementsByNewUser: Movement] 
    static mappedBy = [movementsByOldUser: 'oldUser', movementsByNewUser: 'newUser'] 
    static constraints = { 
     userID blank: false, unique: true 
     fullName blank: false 
     position() 
     department() 
     movements nullable: true 
    } 
} 

Для некоторых справочной документации Престола: http://www.grails.org/doc/2.2.x/ref/Domain%20Classes/mappedBy.html

+0

ваше решение работал, но приложение все еще получило ошибку, которую я решил, удалив «перемещения nullable: true» в ограничениях класса User. –

+0

Может ли кто-нибудь предложить, как мне расширить приложение, чтобы при перемещении инвентаря из olduser в newuser в классе Movement владелец инвентаря должен был быть изменен и отражен в классе User. Возможно ли это, и как я могу это сделать. –

Смежные вопросы