J'essaie de générer des entités JPA à partir d'une base de données existante ayant un design "intéressant".Comment faire une entité d'une table de jointure sans clé primaire
La base de données possède une table appelée UserSet, qui peut contenir des liens vers plusieurs autres UserSets. Il existe une relation un à plusieurs entre UserSets et LinkedUserSets. LinkedUserSets a également une relation un à un avec les UserSets.
J'ai essayé de générer une entité JPA à partir de la structure de la base de données à l'aide de Dali JPA Tools. L'entité résultante Linkeduserset manque l'annotation @Id ou @EmbeddedId et échoue donc à compiler. Comme l'entité résultante contient seulement deux @JoinColumns (qui ne peuvent pas être marqués comme @Id), je n'ai pas encore trouvé de solution à ce problème.
La structure de la base de données ne peut être modifiée d'aucune façon.
Existe-t-il un moyen de surmonter ce problème?
Pars pertinentes de créer des déclarations de table:
CREATE TABLE `LinkedUserSets` (
`UsrSetID` INT(11) NOT NULL DEFAULT '0' ,
`ChildID` INT(11) NOT NULL DEFAULT '0' ,
CONSTRAINT `fk_LinkedUserSets_UserSet1`
FOREIGN KEY (`UsrSetID`)
REFERENCES `UserSet` (`UsrSetID`));
CREATE TABLE `UserSet` (
`UsrSetID` INT(11) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`UsrSetID`),
CONSTRAINT `fk_UserSet_LinkedUserSets1`
FOREIGN KEY (`UsrSetID`)
REFERENCES `LinkedUserSets` (`ChildID`));
entités Generated:
@Entity
@Table(name="linkedusersets")
public class Linkeduserset {
//bi-directional many-to-one association to Userset
@ManyToOne
@JoinColumn(name="UsrSetID")
private Userset userset1;
//bi-directional one-to-one association to Userset
@OneToOne
@JoinColumn(name="ChildID")
private Userset userset2;
}
@Entity
@Table(name="userset")
public class Userset {
private static final long serialVersionUID = 1L;
@Id
@Column(name="UsrSetID")
private int jngSetID;
//bi-directional many-to-one association to Linkeduserset
@OneToMany(mappedBy="userset1")
private Set<Linkeduserset> linkedusersets;
//bi-directional one-to-one association to Linkeduserset
@OneToOne(mappedBy="userset2")
private Linkeduserset linkeduserset;
}
Message d'erreur:
Entity "Linkeduserset" has no Id or EmbeddedId
Je ne peux pas prendre le risque de modifier la structure de la base de données. Il pourrait casser "quelque chose d'autre" en utilisant la même base de données. Ce n'est pas la seule partie "intéressante" de la BD :-) – tputkonen