10
votes

Mappage de tableau JPA

Comment puis-je mapper un tableau de doubles en JPA. J'ai le code suivant qui échoue car hibernate ne peut pas initialiser le tableau.

@Entity
public class YearlyTarget extends GenericModel {

    @Id
    public Integer  year;

    @ElementCollection
    public Double[] values;

    public YearlyTarget(int year) {
        this.year = year;
        this.values = new Double[12];
    }
}


0 commentaires

3 Réponses :


9
votes

Utilisez un type d'objet, tel que ArrayList. Exemple xxx


5 commentaires

Voulez-vous dire que les tableaux ne peuvent pas être mappés directement avec JPA et une collection doit être utilisée à la place?


@ EMT14 Les tableaux simples seraient une véritable douleur dans le cul de travailler avec, si vous avez une collection de valeurs qui change fréquemment. Cette question s'attaque au même problème, avec le même résultat: utiliser une collection.


Les tableaux sont également la meilleure option de stockage pour un type de données de longueur fixe. Pas de surcharge par rapport aux collections. L'utilisation de la collection semble être une solution de contournement le fait que JPA ne persiste pas de tableaux.


@ EMT14 Je soupçonne que les implémentations JPA ne peuvent pas utiliser de réseau de proxy aussi facilement que des listes ou d'autres collections.


@ EMT14 Une arrayliste utilise une matrice comme stockage sous-jacent. Il n'y a pas beaucoup de surcharge lors de l'utilisation d'une arrayliste au lieu d'un tableau. Oui, le redimensionnement se produit, mais il n'a généralement pas d'impact énorme de la performance (dépend du contexte bien sûr). Voir aussi:

JPA ne manda pas de pouvoir persister les tableaux à une table séparée; De toute évidence, JDO ne fait que vous avez choisi de ne pas utiliser cela. Par conséquent, vous devez les stocker comme @LOB ou modifier votre type Java vers une liste.


0 commentaires