Advertisement
marcelopaixaoresende

Untitled

Feb 25th, 2022
1,007
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.74 KB | None | 0 0
  1. public interface Changeable {
  2.  
  3.     ChangeInformation getChangeInformation();
  4.  
  5.     void setChangeInformation(ChangeInformation changeInformation);
  6. }
  7.  
  8.  
  9. @NoArgsConstructor
  10. @AllArgsConstructor
  11. @Embeddable
  12. @Data
  13. public class ChangeInformation implements Serializable {
  14.  
  15.     @Column(name = Columns.CREATION_DATE)
  16.     private DateTime creationDate;
  17.  
  18.     @Column(name = Columns.LAST_MODIFICATION_DATE)
  19.     private DateTime lastModificationDate;
  20.  
  21.     public void setCreatedNow() {
  22.         this.creationDate = DateTime.now();
  23.     }
  24.  
  25.     public void setUpdateNow() {
  26.         this.lastModificationDate = DateTime.now();
  27.     }
  28.  
  29.     @UtilityClass
  30.     public static class Columns {
  31.         public static final String CREATION_DATE = "creation_date";
  32.         public static final String LAST_MODIFICATION_DATE = "last_modification_date";
  33.     }
  34.  
  35. }
  36.  
  37.  
  38.  
  39. public class ChangeableListener {
  40.  
  41.     @PrePersist
  42.     public void onCreation(Changeable changeable) {
  43.         ensureNonNullChangeInformation(changeable);
  44.         changeable.getChangeInformation().setCreatedNow();
  45.     }
  46.  
  47.     @PreUpdate
  48.     public void onUpdate(Changeable changeable) {
  49.         ensureNonNullChangeInformation(changeable);
  50.         changeable.getChangeInformation().setUpdateNow();
  51.     }
  52.  
  53.     private void ensureNonNullChangeInformation(Changeable changeable) {
  54.         if (changeable.getChangeInformation() == null) {
  55.             changeable.setChangeInformation(new ChangeInformation());
  56.         }
  57.     }
  58. }
  59.  
  60.  
  61.  
  62. @Entity
  63. @Table(name = "subscription")
  64. @EntityListeners({ ChangeableListener.class })
  65. @NoArgsConstructor
  66. @Getter
  67. @Setter
  68. @EqualsAndHashCode(of = "id")
  69. @FieldDefaults(level = AccessLevel.PRIVATE)
  70. public class Subscription implements Serializable, Changeable {
  71.  
  72.     @Id
  73.     @GeneratedValue(strategy = GenerationType.IDENTITY)
  74.     Long id;
  75.  
  76.     @Embedded
  77.     ChangeInformation changeInformation;
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement