2014-04-09 10 views
5

Ich versuche, eine Hospitality-App zu entwerfen. Ich habe zwei Tabellen als User und Request. Benutzer könnten Host oder Visitor sein und können Host-Anfragen an andere senden. Aber es ist nicht notwendig, Benutzer als Besucher oder Host zu definieren, es spielt keine Rolle für das System, daher habe ich keine separaten Tabellen für sie. Dieser Unterschied ist nur in der Anforderungstabelle wichtig und muss visitor_id und host_id als Fremdschlüssel beibehalten werden (zugeordnet mit der Primärschlüsselspalte user_id aus der Benutzertabelle, da sowohl der Host als auch der Besucher ebenfalls Benutzer sind).Hibernate mit zwei Fremdschlüsseln aus der gleichen Tabelle-Annotation

Meine Frage ist, wie kann ich diese Beziehung im Ruhezustand mit Annotation definieren? Ich meine, in der Request-Tabelle sollten zwei Fremdschlüssel vorhanden sein, und sie sind der * user_id * Primärschlüsselspalte aus der Benutzertabelle zugeordnet. Jeder Benutzer kann viele Male Gastgeber oder Besucher sein und keine oder viele Anfragen stellen.

@Entity 
public class Request { 
@Id 
private Long req_id; 

.... 

} 

Antwort

8

Eine Anforderung ist für einen Host, und von einem Besucher, Sie haben also nur 2 ManyToOne Verbände aus Anfrage an Benutzer:

@Entity 
public class Request { 
    @Id 
    @Column(name = "req_id") 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "visitor_id") 
    private User visitor; 

    @ManyToOne 
    @JoinColumn(name = "host_id") 
    private User host; 

    // ... 
} 

Wenn Sie diese Verbände bidirektionale machen wollen, dann einfach Sie Brauchen entsprechende Sammlungen im Benutzer:

@Entity 
private class User { 

    /** 
    * requests made to this user, in order for this user to be a host 
    */ 
    @OneToMany(mappedBy = "host") 
    private Set<Request> hostRequests = new HashSet<>(); 

    /** 
    * requests made by this user, in order for this user to be a visitor 
    */ 
    @OneToMany(mappedBy = "visitor") 
    private Set<Request> visitorRequests = new HashSet<>(); 

    // ... 
} 
+0

Hallo, ich habe ähnliche Art Tabelle mit überwintern. Es funktioniert gut, ich habe Probleme mit Jackson Vorwärts- und Rückwärtsreferenzen. Wie nur eine Spalte in Jackson zitiert wird, wenn ich andere 500 Erros mache kommt –

Verwandte Themen