Wenn Sie eine Domäne mithilfe von JPA einer RDBS-Tabelle zuordnen, gibt es Felder und Spalten, die eine Domäne gemeinsam haben.
Es ist typischerweise wie folgt.
Es gibt solche Felder und Spalten, oder? Die Tatsache, dass es für jede Domain existiert, bedeutet, dass der Code dupliziert wird. Dies liegt daran, dass es für die Wartung hilfreich ist, zu protokollieren, wer die Datenbank wann erstellt hat. Daher sind Spalten wie Erstellungsdatum und Änderungsdatum wirklich wichtige Daten.
Aus diesem Grund bietet JPA eine Funktion namens Audit an. Audit ist eine Funktion, mit der Spring Data JPA die Zeit im Sinne der Überwachung automatisch auffüllt. Wenn Sie nach dem Speichern der Domäne im Persistenzkontext oder nach einer Abfrage ein Update durchführen, müssen Sie die Zeitdaten jedes Mal eingeben. Bei Verwendung der Prüfung wird die Zeit jedoch automatisch zugeordnet und der Datenbanktabelle hinzugefügt. Wird es in setzen.
Erstellen Sie eine BaseTimeEntity wie folgt.
package jojoidu.boot.springboot.domain;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
Die BaseTimeEntity-Klasse wird zur übergeordneten Klasse aller Entity-Klassen und übernimmt die Rolle der automatischen Verwaltung des Erstellungsdatums und des Änderungsdatums der Entitätsklasse **. ** ** **
@MappedSuperclass
Wenn die JPA-Entitätsklasse BaseTimeEntity erbt, stellen Sie sicher, dass die Felder (createdDate, modifyDate) auch als Spalten erkannt werden.
@EntityListeners(AuditingEntityListener.class)
Geben Sie die Überwachungsfunktion an die BaseTimeEntity-Klasse weiter.
@CreatedDate
Die Zeit wird automatisch gespeichert, wenn die Entität erstellt und gespeichert wird.
@LastModifiedDate
Die Zeit wird automatisch gespeichert, wenn Sie den Wert der von Ihnen abgefragten Entität ändern.
package jojoidu.boot.springboot.domain.posts;
import jojoidu.boot.springboot.domain.BaseTimeEntity;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity //Gibt die mit der Tabelle verknüpfte Klasse an
public class Posts extends BaseTimeEntity {
@Id //Zeigt das PK-Feld an
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(length = 500, nullable = false)
private String title;
@Column(columnDefinition = "TEXT", nullable = false)
private String content;
private String author;
@Builder
public Posts(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
public void update(String title, String content) {
this.title = title;
this.content = content;
}
}
Vier. Fügen Sie abschließend die Aktivierungsanmerkung zur Hauptklasse hinzu, damit die JPA-Überwachungsanmerkung aktiviert wird.
package jojoidu.boot.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Das Testen ist wichtig, deshalb habe ich auch eine Testmethode hinzugefügt.
@Test
public void saveBaseTimeEntity() {
// given
LocalDateTime now = LocalDateTime.of(2020, 8,12,0,0,0);
postsRepository.save(Posts.builder()
.title("title")
.content("content")
.author("author")
.build());
// when
List<Posts> postsList = postsRepository.findAll();
//then
Posts posts = postsList.get(0);
System.out.println(">>>>>>>createdDate=" + posts.getCreatedDate() + ", modifiedDate=" + posts.getModifiedDate());
assertThat(posts.getCreatedDate()).isAfter(now);
assertThat(posts.getModifiedDate()).isAfter(now);
}
Ich konnte bestätigen, dass es normal funktioniert. Ich bin zu glücklich, so viel Spaß zu haben.
Recommended Posts