Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface Changeable {
- ChangeInformation getChangeInformation();
- void setChangeInformation(ChangeInformation changeInformation);
- }
- @NoArgsConstructor
- @AllArgsConstructor
- @Embeddable
- @Data
- public class ChangeInformation implements Serializable {
- @Column(name = Columns.CREATION_DATE)
- private DateTime creationDate;
- @Column(name = Columns.LAST_MODIFICATION_DATE)
- private DateTime lastModificationDate;
- public void setCreatedNow() {
- this.creationDate = DateTime.now();
- }
- public void setUpdateNow() {
- this.lastModificationDate = DateTime.now();
- }
- @UtilityClass
- public static class Columns {
- public static final String CREATION_DATE = "creation_date";
- public static final String LAST_MODIFICATION_DATE = "last_modification_date";
- }
- }
- public class ChangeableListener {
- @PrePersist
- public void onCreation(Changeable changeable) {
- ensureNonNullChangeInformation(changeable);
- changeable.getChangeInformation().setCreatedNow();
- }
- @PreUpdate
- public void onUpdate(Changeable changeable) {
- ensureNonNullChangeInformation(changeable);
- changeable.getChangeInformation().setUpdateNow();
- }
- private void ensureNonNullChangeInformation(Changeable changeable) {
- if (changeable.getChangeInformation() == null) {
- changeable.setChangeInformation(new ChangeInformation());
- }
- }
- }
- @Entity
- @Table(name = "subscription")
- @EntityListeners({ ChangeableListener.class })
- @NoArgsConstructor
- @Getter
- @Setter
- @EqualsAndHashCode(of = "id")
- @FieldDefaults(level = AccessLevel.PRIVATE)
- public class Subscription implements Serializable, Changeable {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- Long id;
- @Embedded
- ChangeInformation changeInformation;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement