View Javadoc
1   package org.oxerr.commons.user.domain;
2   
3   import java.io.Serializable;
4   import java.time.Instant;
5   import java.util.UUID;
6   
7   import javax.persistence.Access;
8   import javax.persistence.AccessType;
9   import javax.persistence.Column;
10  import javax.persistence.EntityListeners;
11  import javax.persistence.ForeignKey;
12  import javax.persistence.GeneratedValue;
13  import javax.persistence.Id;
14  import javax.persistence.JoinColumn;
15  import javax.persistence.ManyToOne;
16  import javax.persistence.MappedSuperclass;
17  import javax.persistence.Transient;
18  import javax.persistence.Version;
19  import javax.xml.bind.annotation.XmlTransient;
20  
21  import org.springframework.data.annotation.CreatedBy;
22  import org.springframework.data.annotation.CreatedDate;
23  import org.springframework.data.annotation.LastModifiedBy;
24  import org.springframework.data.annotation.LastModifiedDate;
25  import org.springframework.data.jpa.domain.support.AuditingEntityListener;
26  
27  @MappedSuperclass
28  @EntityListeners(AuditingEntityListener.class)
29  @Access(AccessType.PROPERTY)
30  public abstract class BaseEntity implements Serializable {
31  
32  	private static final long serialVersionUID = 2019062001L;
33  
34  	private UUID id;
35  
36  	private User createdBy;
37  	private Instant createdDate;
38  
39  	private User lastModifiedBy;
40  	private Instant lastModifiedDate;
41  
42  	private long version;
43  
44  	@Id
45  	@Column(name = "id")
46  	@GeneratedValue
47  	public UUID getId() {
48  		return id;
49  	}
50  
51  	protected void setId(UUID id) {
52  		this.id = id;
53  	}
54  
55  	@CreatedBy
56  	@ManyToOne
57  	@JoinColumn(
58  		name = "created_by",
59  		updatable = false,
60  		foreignKey = @ForeignKey(name = "fk_created_by")
61  	)
62  	public User getCreatedBy() {
63  		return createdBy;
64  	}
65  
66  	public void setCreatedBy(User createdBy) {
67  		this.createdBy = createdBy;
68  	}
69  
70  	@CreatedDate
71  	@Column(
72  		name = "created_date",
73  		columnDefinition = "timestamp with time zone",
74  		nullable = false,
75  		updatable = false
76  	)
77  	public Instant getCreatedDate() {
78  		return createdDate;
79  	}
80  
81  	public void setCreatedDate(Instant createdDate) {
82  		this.createdDate = createdDate;
83  	}
84  
85  	@LastModifiedBy
86  	@ManyToOne
87  	@JoinColumn(
88  		name = "last_modified_by",
89  		foreignKey = @ForeignKey(name = "fk_last_modified_by")
90  	)
91  	public User getLastModifiedBy() {
92  		return lastModifiedBy;
93  	}
94  
95  	public void setLastModifiedBy(User lastModifiedBy) {
96  		this.lastModifiedBy = lastModifiedBy;
97  	}
98  
99  	@LastModifiedDate
100 	@Column(
101 		name = "last_modified_date",
102 		columnDefinition = "timestamp with time zone",
103 		nullable = false
104 	)
105 	public Instant getLastModifiedDate() {
106 		return lastModifiedDate;
107 	}
108 
109 	public void setLastModifiedDate(Instant lastModifiedDate) {
110 		this.lastModifiedDate = lastModifiedDate;
111 	}
112 
113 	@Version
114 	@Column(name = "version", nullable = false)
115 	public long getVersion() {
116 		return this.version;
117 	}
118 
119 	public void setVersion(long version) {
120 		this.version = version;
121 	}
122 
123 	@Transient
124 	@XmlTransient
125 	public boolean isNew() {
126 		return getId() == null;
127 	}
128 
129 	@Override
130 	public boolean equals(Object obj) {
131 		if (null == obj) {
132 			return false;
133 		}
134 
135 		if (this == obj) {
136 			return true;
137 		}
138 
139 		if (!getClass().equals(obj.getClass())) {
140 			return false;
141 		}
142 
143 		BaseEntity that = (BaseEntity) obj;
144 
145 		return null == this.getId() ? false : this.getId().equals(that.getId());
146 	}
147 
148 	@Override
149 	public int hashCode() {
150 		int hashCode = 17;
151 		hashCode += null == getId() ? 0 : getId().hashCode() * 31;
152 		return hashCode;
153 	}
154 
155 }