2010-12-16 142 views
2

Salut j'ai ce qui suit dans le domaine GrailsComment faire pour résoudre les erreurs Grails Colonne répétée dans le mappage pour l'entité? sur la base de données existant Postgresql

 
class Customer { 
    static mapping = { 
     table 'customer' 
     // version is set to false, because this isn't available by default for legacy databases 
     version false 
     id column:'customerid' //generator:'identity', 
    } 
    Long customerid 
    Long customergroupid 
    String username 
    String password 
    String name 
    String street 
    String city 
    String province 
    String postcode 
    String country 
    Date dateregistered 
    String balance 
    Long parentid 
    String parentrebate 
    String metapath 
    Long metalevel 
    Integer smsreplystatus 
    Integer status 
    String reversalurl 

    static constraints = { 
     customerid(insert:false,update:false) 
     customergroupid(max: 9999999999L) 
     username(size: 1..20, blank: false) 
     password(size: 1..32, blank: false) 
     name(size: 1..20, blank: false) 
     street(size: 0..50) 
     city(size: 0..20) 
     province(size: 0..20) 
     postcode(size: 0..5) 
     country(size: 0..20) 
     dateregistered(nullable: true) 
     balance() 
     parentid(max: 9999999999L) 
     parentrebate() 
     metapath(size: 1..255, blank: false) 
     metalevel(max: 9999999999L) 
     smsreplystatus(max: 99999) 
     status(max: 99999) 
     reversalurl(size: 0..50) 
    } 
    String toString() { 
     return "${customerid}" 
    } 
} 

i ont la base de données actuelle avec les données existantes, et a la cartographie de Gorm avec GRAG mais je reçois cette erreur

 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: postgresql.Customer column: customerid (should be mapped with insert="false" update="false") 
    ... 23 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: postgresql.Customer column: customerid (should be mapped with insert="false" update="false") 

Répondre

1

J'ai eu le même problème, supprimer "Long customerid"

Cela peut ne pas être une solution réalisable, mais au moins l'application compile et crée la table.

N'a pas étudié du tout comme je l'ai réussi à obtenir ce travail - peut-être lors de la définition d'une colonne d'identité personnalisée, la définition de la propriété est implicite (donc l'erreur « colonne répétée ... »)

+2

mise à jour: Échec avec la propriété n'existe pas d'erreur, sympa. Solution, ajoutez le nom: 'customerid' dans la fermeture de mappage pour la colonne d'ID personnalisée. Fonctionne pour moi dans MySQL, enfin. Peut conserver un schéma existant et donner un tour de test à grails ... – virtualeyes

+1

en plus d'ajouter le nom attrib à mapping (et insert: false, update: false à Mapping, pas de contrainte), vous devez aussi ajouter une contrainte nullable: true sur votre colonne d'identifiant personnalisé; sinon, vous obtiendrez une erreur de propriété null pas bien documenté, tout cela - essentiellement passé quelques heures à essayer différentes combinaisons. Diminuer le temps avec un cadre de développement rapide, ironique – virtualeyes

+3

insert: false, update: false pas nécessaire juste le mapping {id colonne: 'col', nom: 'col'} et les contraintes {col (nullable: true)} fait l'affaire pour moi, enfin! – virtualeyes