Maison  >  Article  >  Java  >  Pourquoi Hibernate génère-t-il une erreur « Impossible de déterminer le type pour java.util.List » dans les relations un-à-plusieurs ?

Pourquoi Hibernate génère-t-il une erreur « Impossible de déterminer le type pour java.util.List » dans les relations un-à-plusieurs ?

DDD
DDDoriginal
2024-10-25 15:02:02460parcourir

Why Does Hibernate Throw a

Erreur de mise en veille prolongée : impossible de déterminer le type pour java.util.List

Problème :

Lorsque vous tentez d'utiliser Hibernate pour des opérations CRUD impliquant des relations un-à-plusieurs et plusieurs-à-un, l'erreur suivante se produit :

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: College, for columns: [org.hibernate.mapping.Column(students)]

Classes d'entité :

<code class="java">@Entity
public class College {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int collegeId;
    private String collegeName;

    @OneToMany(targetEntity = Student.class, mappedBy = "college", fetch = FetchType.EAGER)
    private List<Student> students;
}

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int studentId;
    private String studentName;

    @ManyToOne
    @JoinColumn(name = "collegeId")
    private College college;
}</code>

Détails supplémentaires :

  • L'erreur suggère qu'Hibernate ne peut pas déterminer le type de champ des étudiants dans la classe College.
  • L'utilisation de la stratégie d'accès aux champs est indiquée par les annotations placées directement sur les champs.
  • L'annotation @OneToMany utilise l'attribut mappedBy, ce qui implique que la relation est gérée par le champ collège dans la classe Étudiant.
  • Le fichier de configuration XML fourni configure la fabrique de sessions Hibernate et spécifie les propriétés pertinentes.

Solution :

Le problème se pose car Hibernate ne peut pas déterminer le type de domaine des étudiants en raison de l’utilisation de la stratégie d’accès au terrain. Pour résoudre ce problème, les annotations JPA doivent être placées directement au-dessus de chaque champ au lieu des propriétés du getter.

<code class="java">@Entity
public class College {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int collegeId;
    private String collegeName;

    @OneToMany(targetEntity = Student.class, mappedBy = "college", fetch = FetchType.EAGER)
    public List<Student> students;
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn