Bonjour/Bonsoir
Je me pose la question si il est utile de garder l'identifiant de mon entité et sa version dans mon hashCode de la même façon pour equals et par extension pour compareTo.
J'utilise les fonction du package org.apache.commons.lang.builder pour implémenter mes méthodes.
Et pourquoi, car mon identifiant n'est pas naturel et dépend de la persistance et ne me semble pas un candidat à la comparaison ou à la génération de hash de l'ensemble des éléments naturellement unique.
voici mon code
Code java : 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package kn.organization.domain;
 
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
 
 
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
import org.apache.commons.lang.builder.ToStringStyle;
 
/**
 *
 * @author Khaled.Noordin
 */
@Entity
@Table(name = "foo")
@NamedQueries({
 @NamedQuery(name = "Foo.findAll", query = "SELECT f FROM Foo f"),
 @NamedQuery(name = "Foo.findByBar", query = "SELECT f FROM Foo f WHERE f.bar = :bar"),
 @NamedQuery(name = "Foo.findByBaz", query = "SELECT f FROM Foo f WHERE f.baz = :baz"),
 @NamedQuery(name = "Foo.findByStartDate", query = "SELECT f FROM Foo f WHERE f.startDate = :startDate"),
 @NamedQuery(name = "Foo.findBetweenStartDates", query = "SELECT f FROM Foo f WHERE f.startDate between :date1 and :date2")
})
public class Foo implements Serializable {
 
 private static final long serialVersionUID = -1512051317276019769L;
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Long id;
 @Version
 private Integer version;
 @NotNull
 @Size(min = 1, max = 6)
 private String bar;
 @Column(name = "baz", unique = true)
 private Long baz;
 @Temporal(TemporalType.TIMESTAMP)
 @NotNull
 @Column(name = "start_date")
 private Date startDate;
 
 public Foo() {
  this.id = null;
  this.bar = null;
  this.baz = null;
  this.startDate = null;
 }
 
 public Foo(String bar, Long baz, Date startDate) {
  this();
  this.bar = bar;
  this.baz = baz;
  this.startDate = startDate;
 }
 
 public Foo(Long id, Integer version, String bar, Long baz, Date startDate) {
  this.id = id;
  this.version = version;
  this.bar = bar;
  this.baz = baz;
  this.startDate = startDate;
 }
 
 public String getBar() {
  return bar;
 }
 
 public void setBar(String bar) {
  this.bar = bar;
 }
 
 public Long getId() {
  return id;
 }
 
 public void setId(Long id) {
  this.id = id;
 }
 
 public Long getBaz() {
  return baz;
 }
 
 public void setBaz(Long baz) {
  this.baz = baz;
 }
 
 public Date getStartDate() {
  return startDate;
 }
 
 public void setStartDate(Date startDate) {
  this.startDate = startDate;
 }
 
 public Integer getVersion() {
  return version;
 }
 
 public void setVersion(Integer version) {
  this.version = version;
 }
 
 @Override
 public String toString() {
  return ToStringBuilder.reflectionToString(
          this,
          ToStringStyle.SHORT_PREFIX_STYLE);
 }
 
 /**
  * 
  * @return 
  */
 @Override
 public int hashCode() {
  return HashCodeBuilder.reflectionHashCode(
          this,
          new String[]{
           "id",
           "version"
          });
 }
 
 /**
  * 
  * @param object
  * @return 
  */
 @Override
 public boolean equals(Object object) {
  return ( !( object instanceof Foo )
          || object == null ) ? false
          : EqualsBuilder.reflectionEquals(
          this,
          object,
          new String[]{
           "id"
          });
 }
}

cordialement Khaled.Noordin