Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Implement business key equality
Browse files Browse the repository at this point in the history
  • Loading branch information
seanf committed Mar 12, 2014
1 parent 0c0d2b8 commit 1c89e83
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 8 deletions.
Expand Up @@ -38,7 +38,7 @@
@Setter
@Getter
@Access(AccessType.FIELD)
public class AccountKeyBase {
public abstract class AccountKeyBase {
@NotEmpty
@Size(min = 32, max = 32)
@Id
Expand Down
3 changes: 1 addition & 2 deletions zanata-model/src/main/java/org/zanata/model/HAccount.java
Expand Up @@ -77,8 +77,7 @@
@Getter
@Access(AccessType.FIELD)
@ToString(callSuper = true, of = "username")
@EqualsAndHashCode(callSuper = true, of = { "enabled", "passwordHash",
"username", "apiKey" })
@EqualsAndHashCode(of = "username", callSuper = false)
public class HAccount extends ModelEntityBase implements Serializable {
private static final long serialVersionUID = 1L;

Expand Down
Expand Up @@ -35,11 +35,13 @@
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import org.hibernate.annotations.NaturalId;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

Expand All @@ -49,6 +51,7 @@
@ToString
@NoArgsConstructor
@Access(AccessType.FIELD)
@EqualsAndHashCode(of = "keyHash", callSuper = false)
public class HPersonEmailValidationKey implements Serializable {
private static final long serialVersionUID = 1L;

Expand All @@ -57,6 +60,7 @@ public class HPersonEmailValidationKey implements Serializable {
private Long id;

@Column(nullable = false, unique = true)
@NaturalId
private String keyHash;

@ManyToOne(optional = false)
Expand Down
2 changes: 2 additions & 0 deletions zanata-model/src/main/java/org/zanata/model/HTextFlow.java
Expand Up @@ -49,6 +49,7 @@
import javax.validation.constraints.Size;

import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand Down Expand Up @@ -91,6 +92,7 @@
@Getter
@NoArgsConstructor
@Access(javax.persistence.AccessType.FIELD)
@EqualsAndHashCode(of = { "resId", "document" }, callSuper = false)
@ToString(of = { "resId", "revision", "comment", "obsolete" })
@Slf4j
public class HTextFlow extends HTextContainer implements Serializable,
Expand Down
19 changes: 16 additions & 3 deletions zanata-model/src/main/java/org/zanata/model/ModelEntityBase.java
Expand Up @@ -24,6 +24,7 @@
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
Expand All @@ -42,16 +43,14 @@
import org.slf4j.LoggerFactory;

import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

@MappedSuperclass
@Access(AccessType.FIELD)
@EqualsAndHashCode(exclude = "versionNum")
@Getter
@Setter
public class ModelEntityBase implements Serializable, HashableState {
public abstract class ModelEntityBase implements Serializable, HashableState {
private static final long serialVersionUID = -6139220551322868743L;

@Id
Expand All @@ -71,6 +70,20 @@ public class ModelEntityBase implements Serializable, HashableState {
@Column(nullable = false)
protected Integer versionNum;

/**
* Subclasses should implement business key equality/hashCode (suggestion:
* use NaturalId/unique/immutable fields, not the generated ID)
*/
@Override
public abstract boolean equals(Object obj);

/**
* Subclasses should implement business key equality/hashCode (suggestion:
* use NaturalId/unique/immutable fields, not the generated ID)
*/
@Override
public abstract int hashCode();

@SuppressWarnings("unused")
@PrePersist
private void onPersist() {
Expand Down
Expand Up @@ -42,6 +42,7 @@
import lombok.NoArgsConstructor;
import lombok.ToString;

import org.hibernate.annotations.NaturalId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
Expand All @@ -56,8 +57,7 @@
* href="mailto:camunoz@redhat.com">camunoz@redhat.com</a>
*/
@Entity
@EqualsAndHashCode(callSuper = true, of = { "transUnitId", "sourceLanguage",
"translationMemory" })
@EqualsAndHashCode(of = { "translationMemory", "uniqueId" }, callSuper = false)
@ToString(exclude = "translationMemory")
@Data
@NoArgsConstructor
Expand Down Expand Up @@ -96,9 +96,11 @@ public TransMemoryUnit(TransMemory tm, String uniqueId, String transUnitId,

@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "tm_id", nullable = false)
@NaturalId
private TransMemory translationMemory;

@Column(name = "unique_id", nullable = false)
@NaturalId
private String uniqueId;

@Column(nullable = true)
Expand Down

0 comments on commit 1c89e83

Please sign in to comment.