2017-03-16 3 views
0

Je développe une application Java avec la base de données MySql, les objets JPA et EntityManagerFactory avec EclipseLink pour gérer la base de données. Tout fonctionne bien mais j'ai un problème.Get added added Objet avec EntityManagerFactory

Un de mes objets JPA est comme ce

public class JPAObject1{ 
    @Id 
    @GeneratedValue 
    private int id; 
    @OneToMany(//things here) 
    List<JPAObject2> list1; 
    ... 
} 

Ainsi, le champ id sera générée automatiquement par le EntityManagerFactory quand je stocker dans la base de données. Asumming em et tapez EntityManager type d'objet JPAObject1:

em.getTransaction().begin(); 
em.persist(object); 
em.getTransaction().commit(); 
//house work closing things 

Le JPAObject1 est ajouté correctement, je peux voir tous les champs dans ma base de données. Comme l'identificateur de champ est la clé pour faire l'opération de recherche, ma question est: Y a-t-il un moyen d'obtenir le dernier objet ajouté sur l'EntityManager juste au moment où il est ajouté? Parce que j'ai d'autres objets qui utilisent le champ id JPAObject1 en tant que clé étrangère et j'ai besoin de ce champ lorsque l'objet est ajouté à la base de données pour relier les autres, mais la seule façon que je connaisse est de tout JPAObjects et obtenir le dernier dans la collection. Donc, avec quelques objets, ça ne sera pas un problème mais si un processus insère sur la base de données et un autre fait la même chose avant que le processus 1 fasse findAll pour obtenir le dernier ajouté, il y aura une erreur de cohérence ...

Je pense que je l'ai bien expliqué.

Merci beaucoup!

Répondre

1

vous pouvez utiliser ce code

Obejct en = new Obejct(); 
en.setxxx("My name"); 
em.persist(en); 
em.flush(); 
System.out.println(en.getId()); 

l'id genrated après rinçage

+0

Merci beaucoup! –

+0

bienvenue à tout moment. –

1

Notez que les données enregistrées dans la base de données est un ensemble, pas la liste. Donc, ils n'ont pas l'ordre ou quelque chose comme ça, et vous ne pouvez pas obtenir le dernier que vous avez ajouté. Si vous voulez, pls ajouter une colonne comme date, heure ..., et la requête sera comme: "SELECT * FROM Table COMMANDER PAR dateColumn DESC LIMIT 1"

+0

Je ne savais pas que les données étaient enregistrées en tant qu'ensemble, faisait des tests avec un seul objet dans la base de données. Merci –