Re: Sérialisation custom avec JPA

Antoine DESSAIGNE <[email protected]> Fri, 18 Nov 2011 11:54:12 +0100
Newsgroups gmane.comp.java.french.general
Message-ID <CAFkOUcXJbTEz_s5nrv_kX7mfmg+83EkeykhFfHD2820dV8sXJA@mail.gmail.com>
--0016364993334f60e104b2002811
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Salut Baptiste,

Je n'ai pas test=C3=A9 mais je mettrai les annotations JPA sur les getters =
au
lieu des attributs. Puis je cr=C3=A9erai de faux getter et setter pour mett=
re =C3=A0
jour et stocker la version JSON.

Un truc dans ce genre:
@Entity
class MyClass {
    private String attribute;
    public String getAttribute() { return this.attribute; }
    public void setAttribute(String attribute) { this.attribute =3D
attribute; }

    private List<Constraint> constraints;
    @Transient
    public List<Contraint> getContraints() { return this.contraints; }
    public void setConstraints(List<Contraint> contraints) {
this.contraints =3D contraints; }
    @Column(name =3D "JSON")
    String getStringifiedConstraints() { return
stringify(this.constraints); }
    void setStringifiedConstraints(String constraints) { this.constraints =
=3D
objectify(constraints); }
}

Antoine.

Le 17 novembre 2011 17:24, Baptiste MATHUS <[email protected]> a =C3=A9crit :

> Salut =C3=A0 tous,
>
> En r=C3=A9sum=C3=A9, je cherche =C3=A0 faire ce que permettent les UserTy=
pe Hibernate,
> mais de fa=C3=A7on standard avec JPA.
> J'ai l'impression que c'est pas possible, mais je pr=C3=A9f=C3=A8re v=C3=
=A9rifier
> plusieurs fois.
>
> Concr=C3=A8tement, j'ai un objet du genre:
> class MaClasse {
> String attribut;
> List<Contrainte> contraintes =3D new ArrayList();
> }
> Je cherche =C3=A0 d=C3=A9normaliser compl=C3=A8tement "contraintes" et =
=C3=A0 le stocker en
> JSON dans une unique colonne de la table correspondant =C3=A0 MaClasse.
>
> Est-ce que j'ai une possibilit=C3=A9 pour faire =C3=A7a proprement avec u=
n handler
> de s=C3=A9rialisation =C3=A0 la UserType Hibernate ?
>
> La solution alternative que je vois est la suivante : je cr=C3=A9e une au=
tre
> m=C3=A9thode de visibilit=C3=A9 r=C3=A9duite pour g=C3=A9rer stockage&cha=
rgement,et c'est lui
> que je mappe. Je ne mappe pas "contraintes", et je g=C3=A8re moi-m=C3=AAm=
e
> l'int=C3=A9gration entre ces deux "propri=C3=A9t=C3=A9s" (je sais pas si =
je suis tr=C3=A8s
> clair).
>
> Est-ce que cette deuxi=C3=A8me solution est la seule possible avec JPA ?
>
> Merci d'avance.
>
> --
> Baptiste <Batmat> MATHUS - http://batmat.net
> Sauvez un arbre,
> Mangez un castor !
>

--0016364993334f60e104b2002811
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Salut Baptiste,<div><br></div><div>Je n&#39;ai pas test=C3=A9 mais je mettr=
ai les annotations JPA sur les getters au lieu des attributs. Puis je cr=C3=
=A9erai de faux getter et setter pour mettre =C3=A0 jour et stocker la vers=
ion JSON.</div>
<div><br></div><div>Un truc dans ce genre:</div><div>@Entity</div><div>clas=
s MyClass {</div><div>=C2=A0 =C2=A0 private String attribute;</div><div>=C2=
=A0 =C2=A0 public String getAttribute() { return this.attribute; }</div><di=
v>=C2=A0 =C2=A0 public void setAttribute(String attribute) { this.attribute=
 =3D attribute; }</div>
<div><br></div><div>=C2=A0 =C2=A0 private List&lt;Constraint&gt; constraint=
s;</div><div>=C2=A0 =C2=A0 @Transient</div><div>=C2=A0 =C2=A0 public List&l=
t;Contraint&gt; getContraints() { return this.contraints; }</div><div>=C2=
=A0 =C2=A0 public void setConstraints(List&lt;Contraint&gt;=C2=A0contraints=
) { this.contraints =3D=C2=A0contraints; }</div>
<div>=C2=A0 =C2=A0 @Column(name =3D &quot;JSON&quot;)</div><div>=C2=A0 =C2=
=A0 String getStringifiedConstraints() { return stringify(this.constraints)=
; }</div><div>=C2=A0 =C2=A0 void setStringifiedConstraints(String constrain=
ts) { this.constraints =3D objectify(constraints); }</div>
<div>}</div><div><br></div><div>Antoine.</div><div><br><div class=3D"gmail_=
quote">Le 17 novembre 2011 17:24, Baptiste MATHUS <span dir=3D"ltr">&lt;<a =
href=3D"mailto:[email protected]">[email protected]</a>&gt;</span> a =C3=A9crit :<b=
r><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:=
1px #ccc solid;padding-left:1ex;">
Salut =C3=A0 tous,<br><br>En r=C3=A9sum=C3=A9, je cherche =C3=A0 faire ce q=
ue permettent les UserType Hibernate, mais de fa=C3=A7on standard avec JPA.=
<br>J&#39;ai l&#39;impression que c&#39;est pas possible, mais je pr=C3=A9f=
=C3=A8re v=C3=A9rifier plusieurs fois.<br>


<br>Concr=C3=A8tement, j&#39;ai un objet du genre:<br>class MaClasse {<br><=
div style=3D"margin-left:40px">String attribut;<br>List&lt;Contrainte&gt; c=
ontraintes =3D new ArrayList();<br></div>}<br>Je cherche =C3=A0 d=C3=A9norm=
aliser compl=C3=A8tement &quot;contraintes&quot; et =C3=A0 le stocker en JS=
ON dans une unique colonne de la table correspondant =C3=A0 MaClasse.<br>


<br>Est-ce que j&#39;ai une possibilit=C3=A9 pour faire =C3=A7a proprement =
avec un handler de s=C3=A9rialisation =C3=A0 la UserType Hibernate ?<br><br=
>La solution alternative que je vois est la suivante : je cr=C3=A9e une aut=
re m=C3=A9thode de visibilit=C3=A9 r=C3=A9duite pour g=C3=A9rer stockage&am=
p;chargement,et c&#39;est lui que je mappe. Je ne mappe pas &quot;contraint=
es&quot;, et je g=C3=A8re moi-m=C3=AAme l&#39;int=C3=A9gration entre ces de=
ux &quot;propri=C3=A9t=C3=A9s&quot; (je sais pas si je suis tr=C3=A8s clair=
).<br>


<br>Est-ce que cette deuxi=C3=A8me solution est la seule possible avec JPA =
?<br><br>Merci d&#39;avance.<span class=3D"HOEnZb"><font color=3D"#888888">=
<br clear=3D"all"><br>-- <br>Baptiste &lt;Batmat&gt; MATHUS=C2=A0-=C2=A0<a =
href=3D"http://batmat.net" target=3D"_blank">http://batmat.net</a><br>
Sauvez un arbre,<br>

Mangez un castor=C2=A0!<br>
</font></span></blockquote></div><br></div>

--0016364993334f60e104b2002811--