Bonsoir !
Tout d'abord, bonne et heureuse année à tout le monde !
Mais revenons à nos montons... Je développe un projet CPA utilisant les technologies Java Persistance et EJB (plus précisément des SessionBean). Dans la base de donnée, j'ai entre autre les 2 tables suivantes:
- Client
- Adresse
Ces 2 Tables sont "mappés" par des classes entités, et les ID des nouvelles entrées sont géré par la BD elle même, grâce à la clause suivante:
1 2
| create table projetcpa.CLIENT(
ns_client_id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) |
Là où se situe mon problème, c'est lors de l'ajout d'un client. Je crée une nouvelle adresse, puis un nouvel objet client avec l'adresse que j'ai créé, sans toucher à l'ID (=0) d'aucune des deux classes, puis je vérifie les informations. Une fois les informations validés, je persist le client de cette manière :
Les nouvelles informations sont bien ajoutées à la base de données, avec des ID correctes (1, 2, 3 ...), mais les attributs ID des entités que j'ai persisté ne sont pas modifiés, et restent donc à 0.
L'EntityManager est géré par l'EJB, aucun problème la dessus, vu que tout fonctionne parfaitement pour les autres méthodes. Les entités ont été générés automatiquement, et les ID ont bien les tags pour la génération automatique:
1 2 3 4 5
| @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "NS_CLIENT_ID")
private Integer nsClientId; |
Par contre, en retournant le client:
1 2 3
| CODE:
em.persist(c);
return c; |
Et en faisant dans le main:
client = clientEJB.ajouterClient(client);
Là ça marche, mais je comprends toujours pas pourquoi.
En plus je ne peux pas détacher après le persist, vu que dès que je le fait, j'ai de nouveau 0 comme ID.
1 2 3
| em.persist(c);
em.detach(c);
return c; |
N'y a t'il pas un moyen de modifier directement l'ID de l'objet en paramètre, en l'ayant détaché de la BD ?
Merci pour votre aide
Partager