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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
CODE:
em.persist(c);
return c;

Et en faisant dans le main:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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