Hibernate et JPA; Accès aux membres ou via les accesseurs [L'infobrol, site éducatif de Stéphane Gaudry]

Vous devez être membre et vous identifier pour publier un article.
Les visiteurs peuvent toutefois commenter chaque article par une réponse.

Hibernate et JPA; Accès aux membres ou via les accesseurs

Sommaire du document

Astuces de l’Infobrol (Java)Article publié le Mardi 05 Octobre 2010, 09:21


Dans certaines applications, je continue à utiliser un bon vieux DAO avec JDBC, mais c’est quand même beaucoup plus rapide de développer avec Hibernate.

Le problème, c’est que le modèle (la logique métier) se trouve dans un projet Java qui est utilisé comme dépendance Maven dans le projet qui s’occupe de la persistance des données. Il n’est donc pas question de modifier le modèle pour l’adapter à Hibernate, c’est à Hibernate de s’adapter au modèle.

Hibernate et encapsulation


Nous pouvons spécifier dans Hibernate la manière d’accéder aux champs, soit directement au champ lui-même par réflexion, soit au travers des accesseurs(get... et set...).

Pour cela, nous pouvons utiliser l’attribut "default-access" pour le comportement par défaut pour la classe, ou encore simplement "access" au niveau d’un membre.

Exemple avec Hibernate et un fichier de configuration(.hbm)


  1. package be.gaudry.model.brolmeter;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.Collections;
  6. import java.util.Date;
  7. import java.util.List;
  8. import java.util.RandomAccess;
  9. import java.util.Set;
  10. import java.util.TreeSet;
  11.  
  12. import be.gaudry.model.LightObject;
  13.  
  14. /**
  15.  * Adding or removing measures from the indexes may lead to dirty relative
  16.  * measures (i.e. adding an index with an oldest date than the last index). This
  17.  * method sort the original measures (indexes), and re-evaluate the relative
  18.  * measures. The cost of maintaining relative measures is minimized by the fact
  19.  * nothing is done on an insert or a remove, but the state is set to dirty, and
  20.  * the relative measures must be re-evaluated the next time they will be asked
  21.  * for. Asking for relative measures if dirty flag is not set has no cost.
  22.  *
  23.  * @date Feb 7, 2009
  24.  * @author Steph GAUDRY
  25.  *
  26.  */
  27. public class Meter extends LightObject {
  28.  
  29.  
  30. /**
  31. * Indexes of the meter
  32. * @todo: use a Set and builds a treeset to avoid sorting manually
  33. */
  34. private List<Measure> measures;
  35. private EMeterType meterType;
  36. private String unit;
  37.  
  38.  
  39. public Meter() {
  40. this("?", "?");
  41. }
  42.  
  43. public Meter(String name, String unit) {
  44. this(-1, EMeterType.DEFAULT, unit);
  45. this.display = name;
  46. }
  47.  
  48. /**
  49. * @param id
  50. * @param _meterType
  51. * @param _unit
  52. */
  53. public Meter(int id, EMeterType _meterType, String _unit) {
  54. super(id, "");
  55. this.unit = _unit;
  56. this.meterType = _meterType;
  57. this.measures = new ArrayList<Measure>();
  58. }
  59.  
  60.  
  61. /**
  62. * @return the meterType
  63. */
  64. public EMeterType getMeterType() {
  65. return meterType;
  66. }
  67.  
  68. /**
  69. * Returns an unmodifiable view of the measures (only <b>indexes of the
  70. * meter</b>). This collection is <b>sorted by insertion order</b> and not
  71. * by date; call the {@link java.util.Collections#sort(List)
  72. * Collections.sort(List)} method to sort by date. <br />
  73. * This method allows modules to provide users with "read-only" access to
  74. * the measures. Query operations on the returned list "read through" to the
  75. * specified list, and attempts to modify the returned list, whether direct
  76. * or via its iterator, result in an <tt>UnsupportedOperationException</tt>. <br />
  77. * <br />
  78. * The returned list will be serializable if the specified list is
  79. * serializable. Similarly, the returned list will implement
  80. * {@link RandomAccess} if the specified list does.
  81. *
  82. * @return an unmodifiable view of the measures (never null).
  83. */
  84. public Collection<Measure> getMeasures() {
  85. return Collections.unmodifiableList(measures);
  86. }
  87.  
  88. /**
  89. * @param unit
  90. * the unit to set
  91. */
  92. public void setUnit(String unit) {
  93. this.unit = unit;
  94. }
  95.  
  96. /**
  97. * @return the unit
  98. */
  99. public String getUnit() {
  100. return unit;
  101. }
  102.  
  103.  
  104. /**
  105. * Adds a {@link Measure} for this meter.
  106. * <br />Sets also the {@link Measure#setMeter(Meter) measure meter} with this.
  107. * @param measure
  108. * @deprecated use {@link #addMeasure(Date, double)} instead of this (will be protected into next versions)
  109. */
  110. public void addMeasure(Measure measure) {
  111. measures.add(measure);
  112. measure.setMeter(this);
  113. }
  114.  
  115. /**
  116. * Builds and adds a {@link Measure} for this meter.
  117. */
  118. public void addMeasure(Date date, double value) {
  119. measures.add(new Measure(this, date, value));
  120. }
  121.  
  122. public void clearMeasures() {
  123. measures.clear();
  124. relativeMeasures.clear();
  125. dirty = false;
  126. }
  127. }



  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.6//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  3. <hibernate-mapping default-access="field"
  4. default-cascade="none" default-lazy="false" package="be.gaudry.model.brolmeter">
  5. <union-subclass name="MeterHibernateWrapper" table="T_METERS"
  6. extends="be.gaudry.model.LightObject">
  7. <list name="measures" cascade="all">
  8. <key column="meter"/>
  9. <index column="MEASURES_LIST_INDEX"/>
  10. <one-to-many class="MeasureHibernateWrapper"/>
  11. </list>
  12. <property name="unit" type="string" not-null="false" />
  13. <property name="meterType" type="be.gaudry.model.brolmeter.EMeterType" not-null="false" />
  14. </union-subclass>
  15. </hibernate-mapping>

Ce qui nous intéresse est la ligne suivante:
  1. default-access="field"


Remarque: et JPA?


Depuis JPA 2.0, nous avons l’annotation @Access qui nous permet aussi de spécifier comment accéder aux champs.

Avatar :: Steph Un article de StephModifié 1 fois. (dernière modification le Mardi 05 Octobre 2010, 09:33 par Steph)



Source : indéterminée


Commentaires

Sélection, tri et recherche d'articles
FILTRER :
TRIER :1er critère : 2e critère :
CHERCHER : Dans les titres Dans le contenu


[Afficher les liens en fonction des critères du formulaire ci-dessus]

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

229 mots clés dont 1 définis manuellement (plus d'information...).

<index <key <one-to-many extends= </list> <list <property dirty measure.setMeter measures.add measures.clear relativeMeasures.clear return super this this.display this.measures this.meterType this.unit </union-subclass> <union-subclass default-cascade= private public #addMeasure -//Hibernate/Hibernate />Sets /i_url /syntax 3.6//EN <!DOCTYPE </hibernate-mapping> <b>indexes <b>sorted <hibernate-mapping <tt>UnsupportedOperationException</tt>. @Access @author @deprecated @param @return @todo: _meterType _meterType _unit access accesseur accesseurs Accès accéder adapter Adding addMeasure allows annotation applications ArrayList<Measure> asked Asking astuce attempts attribut be.gaudry.model.brolmeter be.gaudry.model.brolmeter.EMeterType be.gaudry.model.LightObject beaucoup builds cascade= certaines champs champs. class= classe clearMeasures collection Collection<Measure> Collections.sort Collections.unmodifiableList column= comment comportement configuration continue cost. default-access default-access= default-lazy= Depuis direct directement does. données. double défaut dépendance développer EMeterType EMeterType.DEFAULT encapsulation encoding= encore Exemple extends fichier Gaudry GAUDRY get... getMeasures getMeterType getUnit Hibernate hibernate-mapping Hibernate. http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd i_url=bibliobrol-dao.html implement import indexes insert insertion instead intéresse iterator java.util.ArrayList java.util.Collection java.util.Collections java.util.Collections#sort java.util.Date java.util.List java.util.RandomAccess java.util.Set java.util.TreeSet JPA LightObject List<Measure> logique lui-même maintaining manière manually mapping Measure measure Measure#setMeter MeasureHibernateWrapper measures measures. MEASURES_LIST_INDEX membre membre. membres meter meter. meter</b> MeterHibernateWrapper meterType meterType method minimized modifier modify modules modèle modèle. métier niveau not-null= nothing occupe oldest operations order</b> original package package= permet persistance persistence pouvons problème projet protected provide public question RandomAccess rapide re-evaluate re-evaluated read-only relative relative Remarque: remove removing result returned Returns réflexion serializable serializable. set... setUnit Signaler une erreur Similarly simplement sorting source specified spécifier String Stéphane Gaudry suivante: syntax= T_METERS table= this. through tip travers treeset trouve unmodifiable UnsupportedOperationException utiliser utilisé version= versions whether

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-419
Document créé le 13/09/04 00:00, dernière modification le Jeudi 06 Février 2014, 18:30
Source du document imprimé : http:///www.gaudry.be/ast.html
St.Gaudry©07.01.02
 
l'infobrol
Nous sommes le Lundi 21 Août 2017, 06:23, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)