Discussion:
Sérialisation custom avec JPA
Baptiste MATHUS
2011-11-17 16:24:59 UTC
Permalink
Salut à tous,

En résumé, je cherche à faire ce que permettent les UserType Hibernate,
mais de façon standard avec JPA.
J'ai l'impression que c'est pas possible, mais je préfÚre vérifier
plusieurs fois.

ConcrÚtement, j'ai un objet du genre:
class MaClasse {
String attribut;
List<Contrainte> contraintes = new ArrayList();
}
Je cherche à dénormaliser complÚtement "contraintes" et à le stocker en
JSON dans une unique colonne de la table correspondant à MaClasse.

Est-ce que j'ai une possibilité pour faire ça proprement avec un handler de
sérialisation à la UserType Hibernate ?

La solution alternative que je vois est la suivante : je crée une autre
méthode de visibilité réduite pour gérer stockage&chargement,et c'est lui
que je mappe. Je ne mappe pas "contraintes", et je gÚre moi-même
l'intégration entre ces deux "propriétés" (je sais pas si je suis trÚs
clair).

Est-ce que cette deuxiÚme solution est la seule possible avec JPA ?

Merci d'avance.
--
Baptiste <Batmat> MATHUS - http://batmat.net
Sauvez un arbre,
Mangez un castor !
marc godin
2011-11-17 16:44:21 UTC
Permalink
on doit pouvoir mapper sur getter renvoie le JSON ?
Cordialement
Marc
Salut à tous,
En résumé, je cherche à faire ce que permettent les UserType Hibernate,
mais de façon standard avec JPA.
J'ai l'impression que c'est pas possible, mais je préfère vérifier
plusieurs fois.
class MaClasse {
String attribut;
List<Contrainte> contraintes = new ArrayList();
}
Je cherche à dénormaliser complètement "contraintes" et à le stocker en
JSON dans une unique colonne de la table correspondant à MaClasse.
Est-ce que j'ai une possibilité pour faire ça proprement avec un handler
de sérialisation à la UserType Hibernate ?
La solution alternative que je vois est la suivante : je crée une autre
méthode de visibilité réduite pour gérer stockage&chargement,et c'est lui
que je mappe. Je ne mappe pas "contraintes", et je gère moi-même
l'intégration entre ces deux "propriétés" (je sais pas si je suis très
clair).
Est-ce que cette deuxième solution est la seule possible avec JPA ?
Merci d'avance.
--
Baptiste <Batmat> MATHUS - http://batmat.net
Sauvez un arbre,
Mangez un castor !
Antoine DESSAIGNE
2011-11-18 10:54:12 UTC
Permalink
Salut Baptiste,

Je n'ai pas testé mais je mettrai les annotations JPA sur les getters au
lieu des attributs. Puis je créerai de faux getter et setter pour mettre à
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 =
attribute; }

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

Antoine.
Post by Baptiste MATHUS
Salut à tous,
En résumé, je cherche à faire ce que permettent les UserType Hibernate,
mais de façon standard avec JPA.
J'ai l'impression que c'est pas possible, mais je préfÚre vérifier
plusieurs fois.
class MaClasse {
String attribut;
List<Contrainte> contraintes = new ArrayList();
}
Je cherche à dénormaliser complÚtement "contraintes" et à le stocker en
JSON dans une unique colonne de la table correspondant à MaClasse.
Est-ce que j'ai une possibilité pour faire ça proprement avec un handler
de sérialisation à la UserType Hibernate ?
La solution alternative que je vois est la suivante : je crée une autre
méthode de visibilité réduite pour gérer stockage&chargement,et c'est lui
que je mappe. Je ne mappe pas "contraintes", et je gÚre moi-même
l'intégration entre ces deux "propriétés" (je sais pas si je suis trÚs
clair).
Est-ce que cette deuxiÚme solution est la seule possible avec JPA ?
Merci d'avance.
--
Baptiste <Batmat> MATHUS - http://batmat.net
Sauvez un arbre,
Mangez un castor !
Baptiste MATHUS
2011-11-22 17:33:02 UTC
Permalink
Salut à tous, salut Toutoune :)
Effectivement, c cette approche que j'ai utilisé au final. En gardant bien
les méthodes techniques en visibilité réduite, l'essentiel est préservé.

Merci à tous
Post by Antoine DESSAIGNE
Salut Baptiste,
Je n'ai pas testé mais je mettrai les annotations JPA sur les getters au
lieu des attributs. Puis je créerai de faux getter et setter pour mettre à
jour et stocker la version JSON.
@Entity
class MyClass {
private String attribute;
public String getAttribute() { return this.attribute; }
public void setAttribute(String attribute) { this.attribute =
attribute; }
private List<Constraint> constraints;
@Transient
public List<Contraint> getContraints() { return this.contraints; }
public void setConstraints(List<Contraint> contraints) {
this.contraints = contraints; }
@Column(name = "JSON")
String getStringifiedConstraints() { return
stringify(this.constraints); }
void setStringifiedConstraints(String constraints) { this.constraints
= objectify(constraints); }
}
Antoine.
Post by Baptiste MATHUS
Salut à tous,
En résumé, je cherche à faire ce que permettent les UserType Hibernate,
mais de façon standard avec JPA.
J'ai l'impression que c'est pas possible, mais je préfÚre vérifier
plusieurs fois.
class MaClasse {
String attribut;
List<Contrainte> contraintes = new ArrayList();
}
Je cherche à dénormaliser complÚtement "contraintes" et à le stocker en
JSON dans une unique colonne de la table correspondant à MaClasse.
Est-ce que j'ai une possibilité pour faire ça proprement avec un handler
de sérialisation à la UserType Hibernate ?
La solution alternative que je vois est la suivante : je crée une autre
méthode de visibilité réduite pour gérer stockage&chargement,et c'est lui
que je mappe. Je ne mappe pas "contraintes", et je gÚre moi-même
l'intégration entre ces deux "propriétés" (je sais pas si je suis trÚs
clair).
Est-ce que cette deuxiÚme solution est la seule possible avec JPA ?
Merci d'avance.
--
Baptiste <Batmat> MATHUS - http://batmat.net
Sauvez un arbre,
Mangez un castor !
Continuer la lecture sur narkive:
Loading...