Comment dans un programme java utilisant Hibernate, lire les méta données des attributs d'une table.
Par exemple, je désire connaître la taille d'un attribut d'une table (ou la taille maximale de ce varchar).
Comment faire cela ? :?
Merci. ;)
Version imprimable
Comment dans un programme java utilisant Hibernate, lire les méta données des attributs d'une table.
Par exemple, je désire connaître la taille d'un attribut d'une table (ou la taille maximale de ce varchar).
Comment faire cela ? :?
Merci. ;)
Pour les métadata d'une classe hibernate, tu as
ou alors passer par JDBCCode:
1
2 sessionfactory.getClassMetadata(Cat.class);
A+
Et oui, tu as raison. :mrgreen:
Maintenant le code suivant extrait les noms des champs de la table :
... avec pour résultat :Code:
1
2
3
4
5
6
7
8 ClassMetadata metaData = HibernateUtil.getSessionFactory().getClassMetadata(Peseeb.class); String[] propertyNames = metaData.getPropertyNames(); for ( int i=0; i<propertyNames.length; i++ ) { System.out.println("Propertie " + i + " => " + propertyNames[i]); }
Mais maintenant je désire connaitre la longueur max du varchar de l'attribut AdrPb.Code:
1
2
3
4 Propertie 0 => NumPb Propertie 1 => AdrPb Propertie 2 => IdP
Comment accéder à cette information ? :?
Merci. ;)
Je ne crois pas qu'on ait accès à cette info, en tout cas, je ne l'ai pas trouvée...
Tu devrais utiliser les metadata JDBC, très complet ça... ;)
A+
hum ça reste possible mais ça demande de bidouiller avec Configuration
en gros et pas beau ça donne ça
il y a des fonctions pour configuration et persistentClass pour ne récupérer que l'objet qui nous intéresseCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 for (Iterator<?> iter = new Configuration().configure("/hibernate.cfg.xml").getClassMappings(); iter.hasNext();) { Object o = (Object) iter.next(); PersistentClass classe = (PersistentClass)o; System.out.println(classe.getMappedClass()); for (Iterator ite = classe.getPropertyIterator(); ite.hasNext();) { Property p = (Property)ite.next(); for (Iterator iterator = p.getColumnIterator(); iterator.hasNext();) { Column c = (Column) iterator.next(); System.out.println(p.getName()+" "+c.getLength()); } } System.out.println(); }
mais je ne suis pas sur que cela soit "correct" de parser comme ça
Merci pour tout. :mouarf:
A+ ;)