2010-11-19 3 views
2

Ich bin neu bei JPA, also Entschuldigung, wenn dies ein sehr grundlegendes Problem ist.JPA ManyToMany Einschränkungen

Ich habe eine Anwendung, wo ein Benutzer über ein Produkt abstimmen kann (Bereich 0 bis 10), aber nur einmal abstimmen kann. Ich bin verwirrt, wie eine in der JPA etablierte Mann-zu-Mann-Beziehung dies ermöglichen würde.

Ich habe ein Benutzerobjekt und ein Abstimmungsobjekt und ein Produktobjekt.

Ein Benutzer kann über ein Produkt abstimmen, aber nur einmal. Ein Produkt kann viele Stimmen von vielen Benutzern haben, aber nur einen pro Benutzer. Wie würde ich dies anhand einer JPA-Annotation gestalten? Ich verstehe das deutlich von einem Datenbankdesign, nur nicht von JPA.

Antwort

1

Da Sie JPA verwenden, das ein Object-Relational Mapper ist, entwerfen Sie es wie wenn JPA und Datenbanken nicht beteiligt wären.

Ich meine, bauen Sie Ihr Objektmodell (Java-Klassen) auf die Weise, die für die Objekte und Beziehungen, die Sie erfassen möchten, sinnvoll wäre - dann sorgen Sie sich um JPA richtig um diese Objekte zu konfigurieren.

Das letzte Mal, als ich JPA verwendet habe, war es ungefähr zu der Zeit, als 2.0 ausgerollt wurde, also erinnere ich mich nicht, wie die Spezifikation die Verwendung von Feldern unterstützt, die Implementierungen von java.util.map sind, aber eine Map wäre guter Weg zu gehen, wenn es unterstützt wird.

Insbesondere in Ihrem Produkt-Objekt könnten Sie ein Feld vom Typ Map haben.

Map<User,Vote> votesOnThisProduct; 

Aber mal ehrlich, was auch immer die vernünftigste sich anfühlt, wenn man darüber nachdenkt, aus der Sicht von Java-Klassen nur, ignoriert JPA und Datenbank Mentalitäten, ist der Weg zu gehen.

Andere Optionen wären zusätzliche Klassen zu definieren, wie

public class ProductVoteRecord 
{ 
    User user; 
    Vote vote; 
    Product product; 
} 

und dann machen Benutzer und Produkt (und möglicherweise stimmen) eine Verbindung Primärschlüssel über JPA Annotationen.

Aber sogar eine solche Klasse zeigt Anzeichen von Vergiftung durch relationales Design, da es im Wesentlichen eine Tischlerei ist.

Verwandte Themen