View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: Generated code! Do not modify by hand!
4   // Generated by: hibernate/HibernateEntity.vsl in andromda-hibernate-cartridge.
5   //
6   package fr.ifremer.quadrige3.core.dao.data.sample;
7   
8   /*-
9    * #%L
10   * Quadrige3 Core :: Client API
11   * %%
12   * Copyright (C) 2017 - 2024 Ifremer
13   * %%
14   * This program is free software: you can redistribute it and/or modify
15   * it under the terms of the GNU Affero General Public License as published by
16   * the Free Software Foundation, either version 3 of the License, or
17   * (at your option) any later version.
18   * 
19   * This program is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22   * GNU General Public License for more details.
23   * 
24   * You should have received a copy of the GNU Affero General Public License
25   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
26   * #L%
27   */
28  import fr.ifremer.quadrige3.core.dao.administration.program.Program;
29  import fr.ifremer.quadrige3.core.dao.administration.user.Department;
30  import fr.ifremer.quadrige3.core.dao.data.samplingoperation.SamplingOperation;
31  import fr.ifremer.quadrige3.core.dao.referential.QualityFlag;
32  import fr.ifremer.quadrige3.core.dao.referential.Unit;
33  import fr.ifremer.quadrige3.core.dao.referential.pmfm.Matrix;
34  import fr.ifremer.quadrige3.core.dao.referential.taxon.ReferenceTaxon;
35  import fr.ifremer.quadrige3.core.dao.referential.taxon.TaxonGroup;
36  import java.io.Serializable;
37  import java.sql.Timestamp;
38  import java.util.Collection;
39  import java.util.Date;
40  import java.util.HashSet;
41  
42  /**
43   * Liste les échantillons prélevés lors d'un passage sur un lieu de surveillance.
44   */
45  // HibernateEntity.vsl annotations merge-point
46  public abstract class Sample
47      implements Serializable, Comparable<Sample>
48  {
49      /**
50       * The serial version UID of this class. Needed for serialization.
51       */
52      private static final long serialVersionUID = -3828429413281029208L;
53  
54      // Generate 13 attributes
55      private Integer sampleId;
56  
57      /**
58       * Identifiant interne de l'échantillon
59       * @return this.sampleId Integer
60       */
61      public Integer getSampleId()
62      {
63          return this.sampleId;
64      }
65  
66      /**
67       * Identifiant interne de l'échantillon
68       * @param sampleIdIn Integer
69       */
70      public void setSampleId(Integer sampleIdIn)
71      {
72          this.sampleId = sampleIdIn;
73      }
74  
75      private String sampleLb;
76  
77      /**
78       * Mmnémonique de l'échantillon
79       * @return this.sampleLb String
80       */
81      public String getSampleLb()
82      {
83          return this.sampleLb;
84      }
85  
86      /**
87       * Mmnémonique de l'échantillon
88       * @param sampleLbIn String
89       */
90      public void setSampleLb(String sampleLbIn)
91      {
92          this.sampleLb = sampleLbIn;
93      }
94  
95      private Integer sampleNumberIndiv;
96  
97      /**
98       * Nombre d'individus constituant l'échantillon. Ce nombre permet de connaître le nombre
99       * d'individus constituant la grille de saisie.
100      * @return this.sampleNumberIndiv Integer
101      */
102     public Integer getSampleNumberIndiv()
103     {
104         return this.sampleNumberIndiv;
105     }
106 
107     /**
108      * Nombre d'individus constituant l'échantillon. Ce nombre permet de connaître le nombre
109      * d'individus constituant la grille de saisie.
110      * @param sampleNumberIndivIn Integer
111      */
112     public void setSampleNumberIndiv(Integer sampleNumberIndivIn)
113     {
114         this.sampleNumberIndiv = sampleNumberIndivIn;
115     }
116 
117     private Float sampleSize;
118 
119     /**
120      * La taille de l'échantillon peut représenter une surface ou un volume suivant les cas. Il peut
121      * aussi s'agir du nombre d'individus entrant dans l'homogénat.
122      * @return this.sampleSize Float
123      */
124     public Float getSampleSize()
125     {
126         return this.sampleSize;
127     }
128 
129     /**
130      * La taille de l'échantillon peut représenter une surface ou un volume suivant les cas. Il peut
131      * aussi s'agir du nombre d'individus entrant dans l'homogénat.
132      * @param sampleSizeIn Float
133      */
134     public void setSampleSize(Float sampleSizeIn)
135     {
136         this.sampleSize = sampleSizeIn;
137     }
138 
139     private String sampleCm;
140 
141     /**
142      * Commentaire de l'échantillon
143      * @return this.sampleCm String
144      */
145     public String getSampleCm()
146     {
147         return this.sampleCm;
148     }
149 
150     /**
151      * Commentaire de l'échantillon
152      * @param sampleCmIn String
153      */
154     public void setSampleCm(String sampleCmIn)
155     {
156         this.sampleCm = sampleCmIn;
157     }
158 
159     private Date sampleControlDt;
160 
161     /**
162      * Date de contrôle de l'échantillon
163      * @return this.sampleControlDt Date
164      */
165     public Date getSampleControlDt()
166     {
167         return this.sampleControlDt;
168     }
169 
170     /**
171      * Date de contrôle de l'échantillon
172      * @param sampleControlDtIn Date
173      */
174     public void setSampleControlDt(Date sampleControlDtIn)
175     {
176         this.sampleControlDt = sampleControlDtIn;
177     }
178 
179     private Date sampleValidDt;
180 
181     /**
182      * Date de validation de l'échantillon
183      * @return this.sampleValidDt Date
184      */
185     public Date getSampleValidDt()
186     {
187         return this.sampleValidDt;
188     }
189 
190     /**
191      * Date de validation de l'échantillon
192      * @param sampleValidDtIn Date
193      */
194     public void setSampleValidDt(Date sampleValidDtIn)
195     {
196         this.sampleValidDt = sampleValidDtIn;
197     }
198 
199     private Date sampleQualifDt;
200 
201     /**
202      * Date de qualification de l'échantillon
203      * @return this.sampleQualifDt Date
204      */
205     public Date getSampleQualifDt()
206     {
207         return this.sampleQualifDt;
208     }
209 
210     /**
211      * Date de qualification de l'échantillon
212      * @param sampleQualifDtIn Date
213      */
214     public void setSampleQualifDt(Date sampleQualifDtIn)
215     {
216         this.sampleQualifDt = sampleQualifDtIn;
217     }
218 
219     private String sampleQualifCm;
220 
221     /**
222      * Commentaire de qualification
223      * @return this.sampleQualifCm String
224      */
225     public String getSampleQualifCm()
226     {
227         return this.sampleQualifCm;
228     }
229 
230     /**
231      * Commentaire de qualification
232      * @param sampleQualifCmIn String
233      */
234     public void setSampleQualifCm(String sampleQualifCmIn)
235     {
236         this.sampleQualifCm = sampleQualifCmIn;
237     }
238 
239     private String sampleScope;
240 
241     /**
242      * Vrai si l'étape de qualification est globale, faux si des éléments fils ou résultats n'ont
243      * pas la même étape
244      * @return this.sampleScope String
245      */
246     public String getSampleScope()
247     {
248         return this.sampleScope;
249     }
250 
251     /**
252      * Vrai si l'étape de qualification est globale, faux si des éléments fils ou résultats n'ont
253      * pas la même étape
254      * @param sampleScopeIn String
255      */
256     public void setSampleScope(String sampleScopeIn)
257     {
258         this.sampleScope = sampleScopeIn;
259     }
260 
261     private String sampleHasMeas;
262 
263     /**
264      * Vrai si l'élément a des résultats de mesure, dénombrement ou fichier
265      * @return this.sampleHasMeas String
266      */
267     public String getSampleHasMeas()
268     {
269         return this.sampleHasMeas;
270     }
271 
272     /**
273      * Vrai si l'élément a des résultats de mesure, dénombrement ou fichier
274      * @param sampleHasMeasIn String
275      */
276     public void setSampleHasMeas(String sampleHasMeasIn)
277     {
278         this.sampleHasMeas = sampleHasMeasIn;
279     }
280 
281     private Timestamp updateDt;
282 
283     /**
284      * Date de modification de l'objet, mise à jour par le système
285      * @return this.updateDt Timestamp
286      */
287     public Timestamp getUpdateDt()
288     {
289         return this.updateDt;
290     }
291 
292     /**
293      * Date de modification de l'objet, mise à jour par le système
294      * @param updateDtIn Timestamp
295      */
296     public void setUpdateDt(Timestamp updateDtIn)
297     {
298         this.updateDt = updateDtIn;
299     }
300 
301     private Integer remoteId;
302 
303     /**
304      * 
305      * @return this.remoteId Integer
306      */
307     public Integer getRemoteId()
308     {
309         return this.remoteId;
310     }
311 
312     /**
313      * 
314      * @param remoteIdIn Integer
315      */
316     public void setRemoteId(Integer remoteIdIn)
317     {
318         this.remoteId = remoteIdIn;
319     }
320 
321     // Generate 12 associations
322     private QualityFlag qualityFlag;
323 
324     /**
325      * Liste des niveaux de qualification.
326      * @return this.qualityFlag QualityFlag
327      */
328     public QualityFlag getQualityFlag()
329     {
330         return this.qualityFlag;
331     }
332 
333     /**
334      * Liste des niveaux de qualification.
335      * @param qualityFlagIn QualityFlag
336      */
337     public void setQualityFlag(QualityFlag qualityFlagIn)
338     {
339         this.qualityFlag = qualityFlagIn;
340     }
341 
342     private TaxonGroup taxonGroup;
343 
344     /**
345      * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
346      * @return this.taxonGroup TaxonGroup
347      */
348     public TaxonGroup getTaxonGroup()
349     {
350         return this.taxonGroup;
351     }
352 
353     /**
354      * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
355      * @param taxonGroupIn TaxonGroup
356      */
357     public void setTaxonGroup(TaxonGroup taxonGroupIn)
358     {
359         this.taxonGroup = taxonGroupIn;
360     }
361 
362     private Unit sizeUnit;
363 
364     /**
365      * Liste l'ensemble des unités de mesure.
366      * @return this.sizeUnit Unit
367      */
368     public Unit getSizeUnit()
369     {
370         return this.sizeUnit;
371     }
372 
373     /**
374      * Liste l'ensemble des unités de mesure.
375      * @param sizeUnitIn Unit
376      */
377     public void setSizeUnit(Unit sizeUnitIn)
378     {
379         this.sizeUnit = sizeUnitIn;
380     }
381 
382     private Collection<Program> programs = new HashSet<Program>();
383 
384     /**
385      * Activités à l'origine de la collecte d'un ensemble cohérent de données.
386      * @return this.programs Collection<Program>
387      */
388     public Collection<Program> getPrograms()
389     {
390         return this.programs;
391     }
392 
393     /**
394      * Activités à l'origine de la collecte d'un ensemble cohérent de données.
395      * @param programsIn Collection<Program>
396      */
397     public void setPrograms(Collection<Program> programsIn)
398     {
399         this.programs = programsIn;
400     }
401 
402     /**
403      * Activités à l'origine de la collecte d'un ensemble cohérent de données.
404      * @param elementToAdd Program
405      * @return <tt>true</tt> if this collection changed as a result of the
406      *         call
407      */
408     public boolean addPrograms(Program elementToAdd)
409     {
410         return this.programs.add(elementToAdd);
411     }
412 
413     /**
414      * Activités à l'origine de la collecte d'un ensemble cohérent de données.
415      * @param elementToRemove Program
416      * @return <tt>true</tt> if this collection changed as a result of the
417      *         call
418      */
419     public boolean removePrograms(Program elementToRemove)
420     {
421         return this.programs.remove(elementToRemove);
422     }
423 
424     private Department recorderDepartment;
425 
426     /**
427      * Liste les départements ou services auxquels sont rattachés les agents
428      * @return this.recorderDepartment Department
429      */
430     public Department getRecorderDepartment()
431     {
432         return this.recorderDepartment;
433     }
434 
435     /**
436      * Liste les départements ou services auxquels sont rattachés les agents
437      * @param recorderDepartmentIn Department
438      */
439     public void setRecorderDepartment(Department recorderDepartmentIn)
440     {
441         this.recorderDepartment = recorderDepartmentIn;
442     }
443 
444     private SamplingOperation samplingOperation;
445 
446     /**
447      * Liste les prélévements effectués lors d'un passage.
448      * @return this.samplingOperation SamplingOperation
449      */
450     public SamplingOperation getSamplingOperation()
451     {
452         return this.samplingOperation;
453     }
454 
455     /**
456      * Liste les prélévements effectués lors d'un passage.
457      * @param samplingOperationIn SamplingOperation
458      */
459     public void setSamplingOperation(SamplingOperation samplingOperationIn)
460     {
461         this.samplingOperation = samplingOperationIn;
462     }
463 
464     private Matrix matrix;
465 
466     /**
467      * Support utilisé pour mesurer un paramètre.
468      * @return this.matrix Matrix
469      */
470     public Matrix getMatrix()
471     {
472         return this.matrix;
473     }
474 
475     /**
476      * Support utilisé pour mesurer un paramètre.
477      * @param matrixIn Matrix
478      */
479     public void setMatrix(Matrix matrixIn)
480     {
481         this.matrix = matrixIn;
482     }
483 
484     private ReferenceTaxon referenceTaxon;
485 
486     /**
487      * Liste des taxons qui sont la référence.
488      * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
489      * et ne
490      * plus l'être par la suite.
491      * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
492      * référents à un moment mais ne peuvent plus l'être par la suite.
493      * Le fonctionnement dans la table TAXON_NAME est le suivant :
494      * - REF_TAXON_ID est toujours renseigné
495      * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
496      * s'agit d'un
497      * taxon virtuel)
498      * - sinon c'est un synonyme
499      * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
500      * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
501      * NB : c'était le comportement initialement prévu.
502      * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
503      * le taxon
504      * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
505      * et les
506      * résultats qu'il pouvait avoir).
507      * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
508      * 1- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qu'on crée T2 : on aurait
509      * alors
510      * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
511      * synonymes, résultats...
512      * 2- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qui existe déjà T2-R2 (et
513      * qui
514      * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
515      * pour
516      * R2 est nécessaire
517      * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
518      * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
519      * référents
520      * @return this.referenceTaxon ReferenceTaxon
521      */
522     public ReferenceTaxon getReferenceTaxon()
523     {
524         return this.referenceTaxon;
525     }
526 
527     /**
528      * Liste des taxons qui sont la référence.
529      * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
530      * et ne
531      * plus l'être par la suite.
532      * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
533      * référents à un moment mais ne peuvent plus l'être par la suite.
534      * Le fonctionnement dans la table TAXON_NAME est le suivant :
535      * - REF_TAXON_ID est toujours renseigné
536      * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
537      * s'agit d'un
538      * taxon virtuel)
539      * - sinon c'est un synonyme
540      * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
541      * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
542      * NB : c'était le comportement initialement prévu.
543      * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
544      * le taxon
545      * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
546      * et les
547      * résultats qu'il pouvait avoir).
548      * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
549      * 1- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qu'on crée T2 : on aurait
550      * alors
551      * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
552      * synonymes, résultats...
553      * 2- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qui existe déjà T2-R2 (et
554      * qui
555      * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
556      * pour
557      * R2 est nécessaire
558      * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
559      * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
560      * référents
561      * @param referenceTaxonIn ReferenceTaxon
562      */
563     public void setReferenceTaxon(ReferenceTaxon referenceTaxonIn)
564     {
565         this.referenceTaxon = referenceTaxonIn;
566     }
567 
568     /**
569      * Returns <code>true</code> if the argument is an Sample instance and all identifiers for this entity
570      * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
571      */
572     @Override
573     public boolean equals(Object object)
574     {
575         if (this == object)
576         {
577             return true;
578         }
579         if (!(object instanceof Sample))
580         {
581             return false;
582         }
583         final Sample that = (Sample)object;
584         if (this.sampleId == null || that.getSampleId() == null || !this.sampleId.equals(that.getSampleId()))
585         {
586             return false;
587         }
588         return true;
589     }
590 
591     /**
592      * Returns a hash code based on this entity's identifiers.
593      */
594     @Override
595     public int hashCode()
596     {
597         int hashCode = 0;
598         hashCode = 29 * hashCode + (this.sampleId == null ? 0 : this.sampleId.hashCode());
599 
600         return hashCode;
601     }
602 
603     /**
604      * Constructs new instances of {@link Sample}.
605      */
606     public static final class Factory
607     {
608         /**
609          * Constructs a new instance of {@link Sample}.
610          * @return new SampleImpl()
611          */
612         public static Sample newInstance()
613         {
614             return new SampleImpl();
615         }
616 
617         /**
618          * Constructs a new instance of {@link Sample}, taking all required and/or
619          * read-only properties as arguments, except for identifiers.
620          * @param qualityFlag QualityFlag
621          * @param recorderDepartment Department
622          * @param samplingOperation SamplingOperation
623          * @param matrix Matrix
624          * @return newInstance
625          */
626         public static Sample newInstance(QualityFlag qualityFlag, Department recorderDepartment, SamplingOperation samplingOperation, Matrix matrix)
627         {
628             final Sample entity = new SampleImpl();
629             entity.setQualityFlag(qualityFlag);
630             entity.setRecorderDepartment(recorderDepartment);
631             entity.setSamplingOperation(samplingOperation);
632             entity.setMatrix(matrix);
633             return entity;
634         }
635 
636         /**
637          * Constructs a new instance of {@link Sample}, taking all possible properties
638          * (except the identifier(s))as arguments.
639          * @param sampleLb String
640          * @param sampleNumberIndiv Integer
641          * @param sampleSize Float
642          * @param sampleCm String
643          * @param sampleControlDt Date
644          * @param sampleValidDt Date
645          * @param sampleQualifDt Date
646          * @param sampleQualifCm String
647          * @param sampleScope String
648          * @param sampleHasMeas String
649          * @param updateDt Timestamp
650          * @param remoteId Integer
651          * @param qualityFlag QualityFlag
652          * @param taxonGroup TaxonGroup
653          * @param sizeUnit Unit
654          * @param programs Collection<Program>
655          * @param recorderDepartment Department
656          * @param samplingOperation SamplingOperation
657          * @param matrix Matrix
658          * @param referenceTaxon ReferenceTaxon
659          * @return newInstance Sample
660          */
661         public static Sample newInstance(String sampleLb, Integer sampleNumberIndiv, Float sampleSize, String sampleCm, Date sampleControlDt, Date sampleValidDt, Date sampleQualifDt, String sampleQualifCm, String sampleScope, String sampleHasMeas, Timestamp updateDt, Integer remoteId, QualityFlag qualityFlag, TaxonGroup taxonGroup, Unit sizeUnit, Collection<Program> programs, Department recorderDepartment, SamplingOperation samplingOperation, Matrix matrix, ReferenceTaxon referenceTaxon)
662         {
663             final Sample entity = new SampleImpl();
664             entity.setSampleLb(sampleLb);
665             entity.setSampleNumberIndiv(sampleNumberIndiv);
666             entity.setSampleSize(sampleSize);
667             entity.setSampleCm(sampleCm);
668             entity.setSampleControlDt(sampleControlDt);
669             entity.setSampleValidDt(sampleValidDt);
670             entity.setSampleQualifDt(sampleQualifDt);
671             entity.setSampleQualifCm(sampleQualifCm);
672             entity.setSampleScope(sampleScope);
673             entity.setSampleHasMeas(sampleHasMeas);
674             entity.setUpdateDt(updateDt);
675             entity.setRemoteId(remoteId);
676             entity.setQualityFlag(qualityFlag);
677             entity.setTaxonGroup(taxonGroup);
678             entity.setSizeUnit(sizeUnit);
679             entity.setPrograms(programs);
680             entity.setRecorderDepartment(recorderDepartment);
681             entity.setSamplingOperation(samplingOperation);
682             entity.setMatrix(matrix);
683             entity.setReferenceTaxon(referenceTaxon);
684             return entity;
685         }
686     }
687 
688     /**
689      * @see Comparable#compareTo
690      */
691     public int compareTo(Sample o)
692     {
693         int cmp = 0;
694         if (this.getSampleId() != null)
695         {
696             cmp = this.getSampleId().compareTo(o.getSampleId());
697         }
698         else
699         {
700             if (this.getSampleLb() != null)
701             {
702                 cmp = (cmp != 0 ? cmp : this.getSampleLb().compareTo(o.getSampleLb()));
703             }
704             if (this.getSampleNumberIndiv() != null)
705             {
706                 cmp = (cmp != 0 ? cmp : this.getSampleNumberIndiv().compareTo(o.getSampleNumberIndiv()));
707             }
708             if (this.getSampleSize() != null)
709             {
710                 cmp = (cmp != 0 ? cmp : this.getSampleSize().compareTo(o.getSampleSize()));
711             }
712             if (this.getSampleCm() != null)
713             {
714                 cmp = (cmp != 0 ? cmp : this.getSampleCm().compareTo(o.getSampleCm()));
715             }
716             if (this.getSampleControlDt() != null)
717             {
718                 cmp = (cmp != 0 ? cmp : this.getSampleControlDt().compareTo(o.getSampleControlDt()));
719             }
720             if (this.getSampleValidDt() != null)
721             {
722                 cmp = (cmp != 0 ? cmp : this.getSampleValidDt().compareTo(o.getSampleValidDt()));
723             }
724             if (this.getSampleQualifDt() != null)
725             {
726                 cmp = (cmp != 0 ? cmp : this.getSampleQualifDt().compareTo(o.getSampleQualifDt()));
727             }
728             if (this.getSampleQualifCm() != null)
729             {
730                 cmp = (cmp != 0 ? cmp : this.getSampleQualifCm().compareTo(o.getSampleQualifCm()));
731             }
732             if (this.getSampleScope() != null)
733             {
734                 cmp = (cmp != 0 ? cmp : this.getSampleScope().compareTo(o.getSampleScope()));
735             }
736             if (this.getSampleHasMeas() != null)
737             {
738                 cmp = (cmp != 0 ? cmp : this.getSampleHasMeas().compareTo(o.getSampleHasMeas()));
739             }
740             if (this.getUpdateDt() != null)
741             {
742                 cmp = (cmp != 0 ? cmp : this.getUpdateDt().compareTo(o.getUpdateDt()));
743             }
744             if (this.getRemoteId() != null)
745             {
746                 cmp = (cmp != 0 ? cmp : this.getRemoteId().compareTo(o.getRemoteId()));
747             }
748         }
749         return cmp;
750     }
751 // HibernateEntity.vsl merge-point
752 // Sample.java merge-point
753 }