Spring MongoDB self-reference

TM69

Bekanntes Mitglied
In einem anderen Projekt habe ich für meinen Benutzer eine self-reference auf created_by, updated_by und deleted_by

Java:
@Entity
@Table(name = "user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * the id of the Language
     *
     * @var PrimaryKey
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * the create date of the user
     *
     * @var TIMESTAMP
     */
    @CreationTimestamp
    private LocalDateTime created_at;

    /**
     * the user who create the user
     *
     * @var INTEGER(11)
     */
    @JoinColumn(name = "created_by", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private User created_by;

    @OneToMany(mappedBy = "created_by", fetch = FetchType.LAZY)
    private List<User> createdUsers;

    /**
     * the last update of the user
     *
     * @var TIMESTAMP
     */
    @UpdateTimestamp
    private LocalDateTime updated_at;

    /**
     * the user who update the entity as last
     *
     * @var INTEGER(11)
     */
    @JoinColumn(name = "updated_by", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private User updated_by;

    @OneToMany(mappedBy = "updated_by", fetch = FetchType.LAZY)
    private List<User> updatedUsers;

    /**
     * the firstname of the user
     *
     * @var String[255] not null
     */
    @NotBlank
    @Length(min = 3, max = 255)
    private String firstname;

    /**
     * the lastname of the user
     *
     * @var String[255] not null
     */
    @NotBlank
    @Length(min = 3, max = 255)
    private String lastname;

    /**
     * the email of the user
     *
     * @var String[255] not null
     */
    @NotBlank
    @Length(min = 5, max = 255)
    @Email(message = "Email should be valid")
    private String email;

    /**
     * the password of the user
     *
     * @var String[255] not null
     */
    @NotBlank
    @Length(max = 255)
    private String password;

    public User() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public LocalDateTime getCreatedAt() {
        return created_at;
    }

    public void setCreatedAt(LocalDateTime created_at) {
        this.created_at = created_at;
    }

    public LocalDateTime getUpdatedAt() {
        return updated_at;
    }

    public void setUpdatedAt(LocalDateTime updated_at) {
        this.updated_at = updated_at;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public User getCreatedBy() {
        return created_by;
    }

    public void setCreatedBy(User created_by) {
        this.created_by = created_by;
    }

    public List<User> getCreatedUsers() {
        return createdUsers;
    }

    public void setCreatedUsers(List<User> userList) {
        this.createdUsers = userList;
    }

    public User getUpdatedBy() {
        return updated_by;
    }

    public List<User> getUpdatedUsers() {
        return updatedUsers;
    }

    public void setUpdatedUsers(List<User> updatedUsers) {
        this.updatedUsers = updatedUsers;
    }

    public void setUpdatedBy(User updated_by) {
        this.updated_by = updated_by;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", created_at=" + created_at + ", created_by=" + created_by + ", createdUsers="
                + createdUsers + ", updated_at=" + updated_at + ", updated_by=" + updated_by + ", updatedUsers="
                + updatedUsers + ", firstname=" + firstname + ", lastname=" + lastname + ", email=" + email
                + ", password=" + password + "]";
    }

}

Wie muss ich es in Spring MongoDB korrekt schreiben? Mit @DBRef?
 

httpdigest

Top Contributor
Das sind alles erstmal keine MongoDB-kompatiblen Annotationen sondern ist anscheinend alles erstmal Hibernate für ein relationales Datenbanksystem. Zeig doch erstmal, welchen MongoDB Treiber du überhaupt verwendest und wie dein Datenmodell bzw. deine Klassen dafür aktuell aussehen.
Wenn du z.B. Spring Data verwendest, dann gibt's da die @DBRef Annotation: https://www.baeldung.com/spring-mongodb-dbref-annotation

Dazu sei noch gesagt, dass MongoDB kein relationales Datenbankmanagementsystem (RDBMS) ist und keine Joins unterstützt! Wenn du also solche Referenzen verwendest, dann hast du immer das n+1 Problem.
 

TM69

Bekanntes Mitglied
Das sind alles erstmal keine MongoDB-kompatiblen Annotationen sondern ist anscheinend alles erstmal Hibernate für ein relationales Datenbanksystem. Zeig doch erstmal, welchen MongoDB Treiber du überhaupt verwendest und wie dein Datenmodell bzw. deine Klassen dafür aktuell aussehen.
Wenn du z.B. Spring Data verwendest, dann gibt's da die @DBRef Annotation: https://www.baeldung.com/spring-mongodb-dbref-annotation

Dazu sei noch gesagt, dass MongoDB kein relationales Datenbankmanagementsystem (RDBMS) ist und keine Joins unterstützt! Wenn du also solche Referenzen verwendest, dann hast du immer das n+1 Problem.
Erstmal gebe ich dir vollkommen recht, wie am Anfang schon erwähnt ist dieses aus einem UR-Alt Projekt von mir, welches Spring JPA / Hibernate auf einer MySQL Datenbank verwendet.

Ansonsten Danke für den Hinweis. Werd ich mir gleich anschauen ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Spring MongoDB: Auswertung schlägt fehl Datenbankprogrammierung 1
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15
T Spring MongoDB @Indexed(unique=true) Datenbankprogrammierung 0
T Cast-Fehler: Spring Data exists.... boolean??? Datenbankprogrammierung 1
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
OnDemand Spring Boot Speichern in Threads Datenbankprogrammierung 6
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
M Spring, JPA, Hibernate, H2 Datenbankprogrammierung 2
R JPA, Spring, löschen einer Entity Datenbankprogrammierung 2
J Hibernate + Spring + SQL Server => Performanceprobleme :( Datenbankprogrammierung 4
R Mongodb testen bzw mocken Datenbankprogrammierung 3
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb tree Architektur Datenbankprogrammierung 6
R Mongodb Unterschied MongoClient und Repository. Datenbankprogrammierung 3
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
R Mongodb Authentication failed Datenbankprogrammierung 6
R Beste Lösung für User Erstellung in mongodb Datenbankprogrammierung 1
6 MongoDB Dokument basierend auf Referenz finden Datenbankprogrammierung 1
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
N MongoDB Datenbankprogrammierung 5
S MongoDB löschung ohne Cascade Datenbankprogrammierung 1
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
S MongoDB Community Edition Datenbankprogrammierung 1
S MongoDB - Abfrageergebnis in Array speichern Datenbankprogrammierung 2
C Über Classpath MongoDB Treiber einbinden und korrekte import Pfade Datenbankprogrammierung 8
B MongoDB- Queryception Datenbankprogrammierung 6
M MongoDb Versändnis Fragen: ( multiserver, morphia/morphium ) Datenbankprogrammierung 0
A MongoDB Passwort Problem Datenbankprogrammierung 0
T MongoDB: Morphia REST 505 Exception Tomcat Datenbankprogrammierung 2
G MongoDB - klassisches one to many Datenbankprogrammierung 2
P MongoDB vs. andere DBs Datenbankprogrammierung 0
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
F MSSql oder MongoDB für die Speicherung von POI Datenbankprogrammierung 9
S self-manytoone Datenbankprogrammierung 21
G SQLite Self Join "unbestimmter tiefe" Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben