2010-04-16 5 views
4

nous allons voir si je peux poser d'une manière compréhensible ...table utilisateur avec JavaDB et mise en veille prolongée à partir de Grails

J'ai commencé avec Grails et créé une classe de domaine appelé utilisateur. Pour autant que je sache, Hibernate est utilisé pour mapper cette classe de domaine à la base de données. Cela fonctionne très bien avec hsqldb.

Maintenant, j'ai essayé de passer à javaDB et d'obtenir un message d'erreur parce que la table est appelée "user" (qui semble être un mot réservé pour javaDB).

Ainsi, une déclaration comme

create table user ... 

se traduira par un message d'erreur.

create table "user" ... 

fonctionne, mais Hibernate ne semble pas mis mettre le nom de la table entre guillemets.

Comment puis-je configurer Hibernate pour utiliser des guillemets afin de le faire fonctionner avec mon nom de table?

PS: oui, je sais, je pourrais affecter la classe de domaine à un autre nom de la table ... :-)

+1

S'il vous plaît corriger Hybernate -> veille prolongée pour la cohérence tag – lexicore

+0

bon point Thanx – rdmueller

Répondre

0

l'a obtenu. Comme Pascal l'a déjà mentionné, l'entrée de mappage est la clé. Mais au lieu d'utiliser des guillemets doubles, une tique de retour apportera succès:

static mapping = { 
    table "`user" 
} 

cette mise en veille prolongée dit de mettre le nom de la table entre guillemets lors de la génération SQL. Il semble aussi fonctionner avec toutes les tables correspondantes ... mais en quelque sorte il laisse tomber le dernier caractère de "utilisateur" dans certains d'entre eux ... :-(

Il semble donc en effet remapper la classe de domaine à une table nom qui ne pose aucun problème sera la meilleure façon.

static mapping = { 
    table "appuser" 
} 
1

Avez-vous essayé d'envelopper le nom table avec des guillemets doubles:

class User { 
    .. 
    static mapping = { 
     table '"user"' 
    } 
} 

Mise à jour: L'une des conséquences de ceci est que vous devrez également personnaliser le nom des tables jointes en utilisant le mot-clé joinTable. Cela semble raisonnable mais les conventions sont l'un des avantages de Grails et ne pas compter sur eux va en quelque sorte contre sa philosophie. Je voudrais personnellement éviter d'utiliser un mot réservé (c'est-à-dire pas user) ici.

+0

ne fonctionne pas puisqu'Hibernate crée d'autres tables qui habe ce nom de la table.! dans le nom de theri: Échec: créer la table "user" _permissions (user_id bigint, permissions_string varchar (255)) – rdmueller

+0

@ Ralf Ah oui, je n'y ai pas pensé. –

Questions connexes