RecordId.java
package org.codefilarete.stalactite.engine.configurer.map;
import java.util.Objects;
import org.codefilarete.stalactite.engine.diff.CollectionDiffer;
/**
* Identifier of a {@link KeyValueRecord} table : since the relation is a kind of one-to-many, with entry key as
* additional identifier, this class is composed of those elements :
* - key element (Map.Entry.key)
* - identifier of source entity
*
* @param <K>
* @param <ID>
* @author Guillaume Mary
*/
public class RecordId<K, ID> {
private ID id;
private K key;
/**
* Default constructor for select instantiation
*/
public RecordId() {
}
public RecordId(ID id, K key) {
setId(id);
this.key = key;
}
public ID getId() {
return id;
}
public void setId(ID id) {
this.id = id;
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RecordId<?, ?> recordId = (RecordId<?, ?>) o;
return Objects.equals(id, recordId.id) && Objects.equals(key, recordId.key);
}
@Override
public int hashCode() {
int result = id.hashCode();
result = 31 * result + key.hashCode();
return result;
}
/**
* Identifier for {@link CollectionDiffer} support (update use case), because it compares beans
* through their "footprint" which is their id in default/entity case, but since we are value type, we must provide a dedicated footprint.
* Could be hashCode() if it was implemented on identifier + element, but implementing it would require implementing equals() (to comply
* with best practices) which is not our case nor required by {@link CollectionDiffer}.
* Note : name of this method is not important
*/
// public int footprint() {
// int result = id.hashCode();
// result = 31 * result + key.hashCode();
// return result;
// }
}