J'essaie de la relation entre en JPA à l'aide d'une annotation intégrée, mais je ne suis pas en mesure de l'exécuter avec succès,
Ici, mon script SQL de base de données est comme suit, P>
ERROR: HCANN000002: An assertion failure occurred (this may indicate a bug in Hibernate) org.hibernate.annotations.common.AssertionFailure: Declaring class is not found in the inheritance state hierarchy: com.entities.Course .... ..
3 Réponses :
Vous devez définir la jointure sur deux pojo
Parce que les deux tables ont leurs propres colonnes code> id code>, Hibernate voudra qu'ils soient tous deux Cela conduit au deuxième problème, qui est que la collection de Enfin, en ayant une collection de @entity code> types.
@MedDABLES CODE> N'a pas son propre identifiant
code>. Donc, la première étape consiste à modifier
cours code> pour être
@entity code>, avec correspondant
@tablename code>, etc. P>
des objets code> ne devrait pas être un
@ElementCollection code>, il devrait s'agir d'un
@Eonetomany code>
Collection d'entités, avec un @JOINCOLUMN code> spécifiant que
college_id code> est la clé étrangère de
tbl_coursous code>. P>.
cours code> dans
college code>, ainsi qu'un
college code> ID dans
cours code> , vous impliquez que vous voulez un Association bidirectionnelle . Entre autres impacts de cela, vous ne devriez pas avoir le
ID code> du collège dans
cours code>. Vous devriez simplement avoir la référence code> college code>. Si vous n'avez pas besoin de naviguer depuis
cours code> ->
college code>, vous voudrez peut-être supprimer cela pour le moment, jusqu'à ce que vous ayez acquis une meilleure compréhension de la cartographie des objets Hibernate. p>
Non nécessaire de définir l'annotation ecence de l'OneTomanan, etc. Il suffit de supprimer l'annotation d'identifiant de la classe intégrée. Bien entendu, l'annotation généralisée devait également être supprimée.
@Asch - c'est vrai, si vous supposez que l'OP ne voulait pas que des cours soient des objets de première classe. Compte tenu des tables telles que définies, en supprimant l'annotation d'identification entraînerait des problèmes.
Les cours sont déjà annotés comme intégrés. Ce n'est donc pas l'entité de toute façon (je suppose que vous voulez dire cela par "l'objet de première classe")
Bien que mon approche ne soit pas convenable mais que cela a toujours fonctionné avec des modifications mineures dans le code,
Tout d'abord, j'ai laissé tomber la table TBL_Coursours et créé un nouveau, comme suit, P>
@Embeddable public class Course { // constuctor @Column(name="NAME") private String courseName; .. // setter getter }
C'est bien, tant que vous voulez Course Code> Pour que ce soit le cycle de vie défini par
college code>, et ne pas être une entité autonome. Vous ne pourrez pas non plus sousclure
cours code>, etc.