-1
votes

Utilisation de @EonetoMany ou @manytomany ciblant une classe non modifiée pour la liste dans les données de printemps JPA

Je suis en train d'essayer la mise en œuvre JPA de données de printemps à l'aide de crudepostory. Ci-dessous est ma classe d'entité xxx

et avoir un référentiel comme ci-dessous, xxx

et essaye d'utiliser la base de données H2 pour les tests locaux xxx

et à partir de la commande CommandlinerUnner appelant la méthode de sauvegarde de l'USEREPOSITOIRE, mais obtenez l'erreur ci-dessous,

causée par: org.hibernate.AnnotationExceptionException: Utilisation de @EonetoMany ou @manytomany ciblant une classe non acquise: modèle.user.photourls [java.lang.string] à org.hibernate.cfg.annotations.collectionbinder.bindmanytomanySecondPass (CollectionBinder.java:1191) ~ [Hibernate-core-5.0.12.final.jar: 5.0.12.final] à org.hibernate.cfg.annotations.CollectionBinder.bindstartomanysecondPass (CollectionBinder.java:794) ~ [hibernate-core-5.0.12.final.jar: 5.0.12.final]


3 Réponses :


2
votes

Hibernate prend en charge trois types de mappage de données: Basic (String E.G, Int), Industriable et entité. Le plus souvent, une ligne de base de données est mappée sur une entité, chaque colonne de base de données étant associée à un attribut de base. Les types intégrés sont plus courants lors de la combinaison de plusieurs mappages de champs dans un groupe réutilisable (l'embarquement étant fusionné dans la structure de mappage d'entité propre).

Les types de base et les intégrations peuvent être associés à une entité via le @ElementCollection , dans une relation d'une entité - nombre-non-entité. xxx

Vous devez donc supprimer @EonetoMany comme l'est pour une Relation-et-activité-plusieurs-entités. Si vous souhaitez mapper vers une entité, alors besoin de modifier le code comme ci-dessous et de créer une nouvelle photo d'entité. xxx

dans le code ci-dessus, la photo est une entité.

Voir le lien ci-dessous pour plus d'informations: https://vladmihalcea.com/how-to -Optimize-unidirectionnel-collections-avec-JPA-and-hibernate /


1 commentaires

@Pradeep accepte cette réponse s'il résout votre problème.



0
votes

Vous êtes pas à l'aide de modèle d'entité pour stocker des URL de photo.

@ElementCollection Annotation est utilisé pour stocker une liste de valeurs en tant qu'attribut d'entité sans avoir à modéliser une entité supplémentaire .

Vous devez donc retirer @Enetomanany.


0 commentaires

0
votes

Vous n'avez pas besoin @onetomany code>, @manytoone code>, @Eonetoone code> ou @manytomany code> ANNOTATION SAUF sont des relations entre les tables afin de supprimer @onetomany code> car il n'y a pas de relation dans votre cas.

public class User {
      @Id
      @GeneratedValue(strategy=GenerationType.AUTO)
      private Long id = null;
    
      @ElementCollection
      @CollectionTable(name="photoUrls")
      @Valid
      private List<String> photoUrls = new ArrayList<String>();
    
      public Long getId() {
        return id;
      }
    
      public void setId(Long id) {
        this.id = id;
      }
      public List<String> getPhotoUrls() {
        return photoUrls;
      }
    
      public void setPhotoUrls(List<String> photoUrls) {
        this.photoUrls = photoUrls;
      }
    
    }


0 commentaires