IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Sérialiser une entity JPA en JSON


Sujet :

JPA Java

  1. #1
    Membre habitué Avatar de yakanet
    Homme Profil pro
    Inscrit en
    Décembre 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Décembre 2005
    Messages : 137
    Points : 164
    Points
    164
    Par défaut Sérialiser une entity JPA en JSON
    Bonjour,

    J'ai une petite architecture dans laquelle j'ai quelques POJO annotés avec JPA et qui sont sauvegardés dans ma base de données. Dans ces POJOs j'ai des relation OneToMany.

    Je cherche à faire un service qui récupère mes entities et qui les retourne en JSON.

    J'utilise l'implémentation jersey pour JAX-RS.

    Mon problème est que lorsque j'essaye de sérializer mon POJO, j'obtiens une exception "Mapping cyclic references to XML". POJO1 => List<POJO2> => POJO1

    En regardant un peu sur Internet j'ai vu que l'on pouvait fixer ce problème via les annotations @XmlId et @XmlIdRef (de manière à référencer POJO2 par exemple plutot que de le sérializer à chaque fois). Le problème est que l'annotation @XmlId ne peut être définie que sur une clé de type java.lang.String. Problème ma clé primaire est une clé de type java.lang.Long.

    Donc ma question est, est ce qu'il existe un moyen de mettre cette annotation sur un Long, ou bien est ce qu'il existe une au méthode me permettrai de sérializer mon POJO, sans faire toute la sérialization à la main.

    Merci.

    PS: Un petit bout de code pour voir le problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @XmlRootElement(name="demo1")
    @NamedQuery(name="Demo.all", query="SELECT d FROM Demo1 d")
    @Entity
    public class Demo1 {
    	@Id
    	@GeneratedValue(strategy=GenerationType.IDENTITY)
    	private Long id;
    	@ManyToOne
    	@JoinColumn(name = "demo_id")
    	private Demo2 demo;
    	private String name;
    //getters & setters
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @XmlRootElement(name = "demo2")
    @Entity
    public class Demo2 {
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Long id;
    	@OneToMany(mappedBy = "demo")
    	private List<Demo1> demo1List;
    	private String name;
    //getters & setters
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Path("/demo")
    public class DemoResources {
    	private EntityManagerFactory emf;
    	private EntityManager em;
     
    	public DemoResources() {
    		emf = Persistence.createEntityManagerFactory("androidJTA");
    		em = emf.createEntityManager();
    	}
     
    	@GET
    	@Produces("application/json")
    	public List<Demo1> getDemo() {
    		Query query = em.createNamedQuery("Demo.all");
    		return query.getResultList();
    	}
    }
    Je pense qu'il doit exister une solution toute simple car je ne doit pas être le premier à vouloir sérializer un POJO JPA, mais je ne l'ai pas encore trouvée.

  2. #2
    Membre habitué Avatar de yakanet
    Homme Profil pro
    Inscrit en
    Décembre 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Décembre 2005
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    J'ai trouvé une série de liens très interessants :


    Sur lequel ils parlent entre autre de l'annotation @XmlJavaTypeAdapter, qui permet de définir un mapping Object<-> JSON par défaut pour une classe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2009, 18h56
  2. ClassCastException avec JPA et une Entity générée par Netbeans
    Par nicorama dans le forum Persistance des données
    Réponses: 2
    Dernier message: 05/02/2009, 20h39
  3. [VB.NET] Comment peut-on sérialiser une Collection ?
    Par Jabbal'H dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/03/2006, 21h24
  4. [Jonas] Impossible de déployer une Entity Bean CMP2
    Par blockparty dans le forum JOnAS
    Réponses: 2
    Dernier message: 01/12/2005, 15h45
  5. [Serializable][image] Sérialiser une image
    Par Galima dans le forum Graphisme
    Réponses: 7
    Dernier message: 01/07/2004, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo