Pour valider les données que je reçois, je dois m'assurer que la longueur ne dépassera pas la longueur d'une colonne de base de données. Maintenant, toutes les informations de longueur sont stockées dans les fichiers de mapping Hibernate, y a-t-il de toute façon accès à ces informations par programme?Obtention de la longueur de colonne à partir des mappages Hibernate?
Répondre
Vous pouvez y arriver mais ce n'est pas facile. Vous pourriez vouloir faire quelque chose comme ci-dessous au démarrage et stocker un cache statique des valeurs. Il y a beaucoup de cas particuliers à traiter (héritage, etc.), mais cela devrait fonctionner pour de simples mappages à une seule colonne. J'aurais peut-être omis certains contrôles d'instance et de null.
for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) {
PersistentClass persistentClass = (PersistentClass)iter.next();
for (Iterator iter2=persistentClass.getPropertyIterator(); iter2.hasNext();) {
Property property = (Property)iter2.next();
String class = persistentClass.getClassName();
String attribute = property.getName();
int length = ((Column)property.getColumnIterator().next()).getLength();
}
}
Je vais devoir essayer, merci Brian. –
Basé sur la réponse de Brian, c'est ce que j'ai fini par faire.
private static final Configuration configuration = new Configuration().configure();
public static int getColumnLength(String className, String propertyName) {
PersistentClass persistentClass = configuration.getClassMapping(className);
Property property = persistentClass.getProperty(propertyName);
int length = ((Column) property.getColumnIterator().next()).getLength();
return length;
}
Cela semble bien fonctionner. J'espère que cela aidera tous ceux qui trébuchent sur cette question.
Avec Hibernate 5, obtenez la classe PersistentClass comme ceci (au lieu de via la configuration): 'StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder(). Configure (" hibernate.cfg.xml "). Build(); Métadonnées métaData = new MetadataSources (standardRegistry) .getMetadataBuilder(). Build(); Liste
Parfois, il peut être problématique d'obtenir l'objet Configuration (si vous utilisez un framework d'application et que vous ne créez pas de session factory par vous-même en utilisant la Configuration).
Si vous utilisez par exemple Spring, vous pouvez utiliser LocalSessionFactoryBean (à partir de votre applicationContext) pour obtenir l'objet Configuration. Ensuite, l'obtention de la longueur de la colonne est partie juste de gâteau;)
factoryBean.getConfiguration().getClassMapping(String entityName) .getTable().getColumn(Column col).getLength()
Cependant, lorsque je tente d'accéder au LocalSessionFactoryBean
, je prends une exception class cast
LocalSessionFactoryBean factoryBean = (LocalSessionFactoryBean) WebHelper.instance().getBean("sessionFactory");
exception:
org.hibernate.impl.SessionFactoryImpl cannot be cast to org.springframework.orm.hibernate3.LocalSessionFactoryBean
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean>
Cela semble sournois ....
EDIT: a trouvé la réponse. Vous devez utiliser une esperluette devant la chaîne de nom de haricots
LocalSessionFactoryBean factoryBean = (LocalSessionFactoryBean) WebHelper.instance().getBean("&sessionFactory");
Mon modèle de développement préféré est à la base de la longueur de la colonne sur une constante, qui peut être facilement référencé:
class MyEntity {
public static final int FIELD_LENGTH = 500;
@Column(length = FIELD_LENGTH)
String myField;
...
}
- 1. Longueur de données dans la colonne ntext?
- 2. Modifier une longueur de colonne
- 3. (N) Hibernate: mappages de base/maître avec les relations
- 4. Obtention d'une seule colonne à partir d'une entité
- 5. Spring: obtention de ResourceBundle à partir de MessageSource
- 6. Ressort ne trouvant pas le fichier de mappages Hibernate
- 7. Obtention de la taille de fichier à partir de OpenFileDialog?
- 8. Linq to SQL - Longueur sous-jacente de la colonne
- 9. Extraction d'éléments uniques à partir d'une liste de mappages
- 10. longueur variable des arguments lus à partir de variables Matlab
- 11. Obtention du DataType de @JPA à partir de JPA
- 12. Configuration de la colonne de tri de l'entité Hibernate
- 13. Obtention de valeur à partir de DataView C#
- 14. Obtention de données XML à partir de la 3ème fonction?
- 15. Obtention de la valeur d'une étiquette à partir de HttpContext.Current.Request
- 16. Obtention de texte à partir d'un QListView
- 17. Obtention du montant de la TVA dans la colonne calculée
- 18. Obtention des données des derniers mois à partir de la base de données
- 19. Obtention d'un délégué à partir de methodinfo
- 20. hibernate découverte automatique et génération de mappages de base de données avec les POJO
- 21. Implémentation de la pagination des résultats dans hibernate (obtention du nombre total de lignes)
- 22. Comment faire des mappages de collection basés sur une requête personnalisée dans Hibernate?
- 23. Outil pour générer des classes C# à partir de fichiers de mappages NHibernate?
- 24. VB Obtention d'un objet à partir de la ligne DataGridView
- 25. Obtention de données à partir d'un DataGrid
- 26. T-SQL Grouper des lignes à partir des colonnes de longueur MAX dans différentes lignes (?)
- 27. Code de hachage numérique de longueur fixe à partir d'une chaîne de longueur variable dans C#
- 28. Comment déterminer si une taille de colonne est en octets ou caractères à partir des métadonnées de la colonne?
- 29. Impact pour augmenter la longueur de colonne d'une table existante
- 30. Obtention d'un fichier XML à partir d'un jeu de données
Voir aussi http://stackoverflow.com/questions/1816780/ pour une solution JPA à ce problème. –