11
votes

Mappage de mappage avec hibernate

Pouvez-vous vous aider à mapper cette classe à l'aide de Hibernate? XXX

J'utilise PostgreSQL et le type de colonne dans la table est entier [] Comment ma matrice doit être mappée?


0 commentaires

4 Réponses :


4
votes

Je n'ai jamais marqué de matrices à hiberner. J'utilise toujours des collections. Donc, j'ai légèrement changé votre classe: xxx


4 commentaires

Ça ne marche pas. Causé par: Org.hibernate.AnnotationException: Utilisation de @EonetoMany ou @manytomany ciblant une classe non mappée


Comment se fait-il que cette réponse a été acceptée? Vous devez utiliser @ElementCollection ou créer un type personnalisé.


Lorsque vous utilisez OneTomanan, vous ne pouvez utiliser que la liste avec d'autres entités. Donc, les primones ne fonctionnent pas. Comme @Aleksbenmaza a déclaré utiliser ElementCollection avec des éléments non mappés


@Alexr j'ai besoin de mapper ma double tableau multidimensionnelle? Que faire s'il vous plaît suggérer.



17
votes

Hibernate (et JPA) ne peut pas modifier directement le type de tableau PostgreSQL. Voir cette question pour savoir comment procéder si vous devez vraiment conserver votre structure de base de données tel quel. Ce fil a un exemple de type personnalisé requis.

Si vous pouvez modifier votre schéma, vous pouvez laisser hibernate créer une table supplémentaire pour gérer la collection - Liste . Ensuite, en fonction de la version de Hibernate que vous utilisez:


1 commentaires

Ces annotations vont-elles créer une association unique automatiquement?



8
votes

Hibernate ne peut que cartographier les types primitifs. Vérifiez sous le dossier Org.hibernate.type du package Hibernate JAR. INT Array n'est pas l'un d'entre eux. Vous devez donc écrire un type personnalisé qui peut implémenter l'interface USERTYPE.

Type intArrayType = new TypeLocatorImpl(new TypeResolver()).custom(IntArrayUserType.class);
Query query = getSession().createSQLQuery("select values from MyClass")
   .addScalar("values", intArrayType);
List<Integer[]> results = (List<Integer[]>) query.list();


2 commentaires

Utilisez-vous cela dans la production? Est-ce que ça marche pour toi?


Oui, cela fonctionne dans la production. J'ai copié cet extrait de mon code de travail



7
votes

4 commentaires

Vos exemples fonctionnent parfaitement bien pour insertion / mise à jour. Pouvez-vous donner un exemple pour chercher deux types de tableaux dans une seule requête?


J'ai essayé, mais je n'obtiens que ces valeurs dont je me suis établi. Et je suis incapable de transformer les Resulatset à l'aide de SQLRESULTsetMapping


Votre bibliothèque prend-elle en charge la version 2.2.4 Spring-boot? Quand je la met à niveau, je reçois cette exception causée par: java.util.serviceconfigurationError: com.fasterxml.jackson.databind.module: fournisseur com.fasterxml.jackson.module.jaxb.jaxbannationModule non trouvé


Le framework Types Hibernate ne dépend pas de la chaussure à ressort. Ils partagent les dépendances hibernate ORM et Jackson, donc ce problème que vous avez trouvé est, probablement causé par Jackson. Pour obtenir une solution, vous devez Ouvrir un problème sur GitHub et fournir le Version de dépendance Jackson que vous utilisez. Vous pouvez utiliser dépendance MVN: arborescence pour obtenir cela.