0

Ich versuche, eine Anwendung zu implementieren. In dieser Anwendung habe ich einen Entity-Namen Kommentar, Antwort, Frage. Frage, Antwort und Kommentar hat Kommentare, so dass ich plane, eine kommentable Klasse zu erstellen und alle drei Klassen können kommentarisch erweitert werden. In dieser kommentierbaren Klasse hält es Set, aber ich wundere mich über die Leistung dieser Struktur. Weil es immer eine Join-Abfrage erstellen wird, um Kommentare zu erhalten. Was passiert, wenn ich eine separaten Kommentar Einheit schaffen, die hat commentedObjectId und wenn Kommentare werden auf separate Tabelle make Abfrage benötigt wie, wo commentedObjectId = id?Ist es gute Idee, nur Entity-ID statt Set <Entity> für weniger Betrieb beitreten halten

class Answer extends Commentable{} 
    class Comment extends Commentable{} 
    class Question extends Commentable{} 

    class Commentable extends BaseModel{ 

    @OneToMany 
    Set<Comment> comments; 

    public Set<Comments> getComments() { 
     return comments; 
    } 

    public void setComments(Set<Comment> comments) { 
     this.comments = comments; 
    }` 

Alternative zur Vermeidung von Join-Operationen. Sollte ich die Datenbank so denormalisieren?

class Comment extends BaseModel { 
    String commentedObjectId; 

    public String getcommentedObjectId() { 
     return commentedObjectId; 
    } 

    public void setcommentedObjectId(String commentedObjectId) { 
     this.commentedObjectId = commentedObjectId; 
    } 
} 

Antwort

0

Sie sollten auf jeden Fall Domain-Objekte verwenden. Hibernate ermöglicht es, anzugeben, was Sie verbinden oder lazy-loaden möchten.

nur Ihre Commentables zu laden, ohne Kommentare Fügen Sie diese Abfrage verwenden:

Criteria cirt = session.createCriteria(Commentable.class); 
crit.setFetchMode("comments", FetchMode.LAZY); 

@SuppressWarnings("unchecked") 
List<Commentable> result = crit.list(); 
+0

Vielen Dank für Ihre schnelle Antwort, aber wenn Kommentare zu holen wird es Abfragen machen wieder mitmachen. Wenn der Tag kommt, an dem ich Millionen von Fragen und Millionen von Kommentaren habe. Wie funktioniert diese Join-Abfrage? – ilkerbfl

+0

Noch wird es join sql machen, der Fokuspunkt ist; Ich sollte Denormalisierung für Leistung besser machen? – ilkerbfl

Verwandte Themen