Problème JPA/Hibernate clé primaire composite
Dernière réponse : dans Programmation
Bonjour à tous,
Je débute avec JPA/Hibernate et je me retrouve confronté à un problème.
J'ai une base de données composées de plusieurs table liés entre elle, jusque la rien d'extraordinaire.
Mon problème et le suivant:
J'ai les tables suivante:
A: a (PK), nom
B: b(pk), nom
C: a(FK A:a), b(FK B:b), data
Ma table C n'a donc pas de primary key, j'ai donc décidé que a+b formerais ma PK. Mon problème est que je n'arrive pas à établir les relations manytoone et onetomany entre mes tables.
Quelqu'un aurait il une idée de comment faire car je bloc dessus depuis plusieurs heure.
Merci.
Je débute avec JPA/Hibernate et je me retrouve confronté à un problème.
J'ai une base de données composées de plusieurs table liés entre elle, jusque la rien d'extraordinaire.
Mon problème et le suivant:
J'ai les tables suivante:
A: a (PK), nom
B: b(pk), nom
C: a(FK A:a), b(FK B:b), data
Ma table C n'a donc pas de primary key, j'ai donc décidé que a+b formerais ma PK. Mon problème est que je n'arrive pas à établir les relations manytoone et onetomany entre mes tables.
Quelqu'un aurait il une idée de comment faire car je bloc dessus depuis plusieurs heure.
Merci.
Autres pages sur : probleme jpa hibernate cle primaire composite
Lassé par la pub ? Créez un compte
Oui mais ça ne change pas ton MCD puisque celui-ci est conçu pour faire de ta table C une table de jointure, et donc ne pas utiliser la PK
En fait ça rajoute juste un champ de plus mais si tu as la possibilité de le faire ça règle le problème.
Quand à la volumétrie, rajouter une PK sur une table, même très grosse, n'a jamais planté une base. Et puis d'après ce que j'ai compris tu es obligé d'en avoir une
En fait ça rajoute juste un champ de plus mais si tu as la possibilité de le faire ça règle le problème.
Quand à la volumétrie, rajouter une PK sur une table, même très grosse, n'a jamais planté une base. Et puis d'après ce que j'ai compris tu es obligé d'en avoir une
Un int32 va jusqu'à 2 147 483 647 quand il est signed, en unsigned c'est le double
Bon courage pour le dépasser ^^
Un int32 prend 4 octets, il faut vraiment avoir de très très grosses bases pour que ça devienne imposant. Si tu as 2 milliards d'enregistrements ça te prend 8 Go en plus.
Enfin bref... A part ça je n'ai pas de solution.
Mais si tu rechignes pour mettre un int en PK, pourquoi tu voulais à l'origine mettre a+b ?
Bon courage pour le dépasser ^^
Un int32 prend 4 octets, il faut vraiment avoir de très très grosses bases pour que ça devienne imposant. Si tu as 2 milliards d'enregistrements ça te prend 8 Go en plus.
Enfin bref... A part ça je n'ai pas de solution.
Mais si tu rechignes pour mettre un int en PK, pourquoi tu voulais à l'origine mettre a+b ?
Salut,
Je viens de voir ton problème alors que je suis sur un problème pas mal similaire.
J'ai déjà été confronté à ce dont tu fait par et en voici ma solution. Soit-dit en passant, je ne vois pas ce que tu veux dire par JPA, moi je suis avec hibernate, c'est pas mal flou mais je te donne ma solution sa ne peut que t'aider.
Donc tu défini une classe TableCPK, qui est comme suis :
@Embeddable
public class TableCPK implements Serializable {
@ManyToOne
@JoinColumn ...
private // ta primière jointure : un sur t1
@ManyToOne
@JoinColumn ...
// ta 2iem jointure : deux sur t2
Tes getters and setters ....
}
Puis dans ta classe C :
@Entity
@Table (...)
@AssociationOverrides({
@AssociationOverride(name = "component.t1", joinColumns=@JoinColumn(name = "un")),
@AssociationOverride(name = "component.t2", joinColumns=@JoinColumn(name = "deux"))})
public class ... {
...
@Embedded Id
private tableCPK component ;
...
}
Voila en gros comment j'ai procédé.
Cependant, avac hibernate. tu n'as pas besoin de mapper les tables de jointure. Pour cela, il faut utiliser joindTable dans les autre tables avec des info... C'est une chose sur laquelle je travaille donc je n'ai pas encore bien saisi le principe.
Bonne journé
Je viens de voir ton problème alors que je suis sur un problème pas mal similaire.
J'ai déjà été confronté à ce dont tu fait par et en voici ma solution. Soit-dit en passant, je ne vois pas ce que tu veux dire par JPA, moi je suis avec hibernate, c'est pas mal flou mais je te donne ma solution sa ne peut que t'aider.
Donc tu défini une classe TableCPK, qui est comme suis :
@Embeddable
public class TableCPK implements Serializable {
@ManyToOne
@JoinColumn ...
private // ta primière jointure : un sur t1
@ManyToOne
@JoinColumn ...
// ta 2iem jointure : deux sur t2
Tes getters and setters ....
}
Puis dans ta classe C :
@Entity
@Table (...)
@AssociationOverrides({
@AssociationOverride(name = "component.t1", joinColumns=@JoinColumn(name = "un")),
@AssociationOverride(name = "component.t2", joinColumns=@JoinColumn(name = "deux"))})
public class ... {
...
@Embedded Id
private tableCPK component ;
...
}
Voila en gros comment j'ai procédé.
Cependant, avac hibernate. tu n'as pas besoin de mapper les tables de jointure. Pour cela, il faut utiliser joindTable dans les autre tables avec des info... C'est une chose sur laquelle je travaille donc je n'ai pas encore bien saisi le principe.
Bonne journé
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumClé composite jpa
- ForumJpa clé composite
- ForumJpa hibernate avec netbeans
- ForumApplication java struts2, jpa, hibernate
- articlesHibernate clé composée
- ForumJpa hibernate
- ForumProblème clé usb pny
- ForumProblème de formatage clé usb
- ForumProblème de connexion clé wifi
- ForumProblème clé usb illisible
- Voir plus