10 Stimmen

JPA-Entität für eine Tabelle ohne Primärschlüssel

Ich habe eine MySQL-Tabelle ohne Primärschlüssel, und ich habe es in eine JPA-Entität zuordnen. Ich kann die Tabelle in keiner Weise ändern.

Da Entitäten einen Primärschlüssel haben müssen, muss ich einen angeben. Wenn ich sicher bin, dass das Feld, das ich als Primärschlüssel in der Entität verwende (oder die Felder, falls ich mich für die Verwendung eines zusammengesetzten Primärschlüssels entscheide), immer eindeutig (und nicht null) in der Tabelle sein wird, kann die Tatsache, dass die Tabelle keinen Primärschlüssel hat, der in CREATE TABLE angegeben ist, irgendwelche Probleme verursachen?

8voto

skaffman Punkte 389758

Das ist richtig. JPA hat keine Möglichkeit zu wissen, ob die Spalte(n), die es als PK verwendet, tatsächlich eine echte PK in der Datenbank ist. Wenn diese Spalte(n) in der Praxis eine PK ist (sind), dann sollte es in Ordnung sein.

Es kann jedoch zu Leistungsproblemen kommen, wenn die Pseudo-PK-Spalten nicht korrekt indiziert sind - JPA führt Abfragen gegen die PK in der Annahme aus, dass sie gut funktionieren.

2voto

Dewfy Punkte 22558

JPA selbst analysiert Ihre Datenbank nicht. Verwenden Sie einfach keine gängigen Methoden mit Primärschlüsseln (find/merge/...), sondern verwenden Sie stattdessen benannte Abfragen, z. B. mit der Syntax von jpql update.

@Entity
@Table(name = "login")
@NamedQueries({
        @NamedQuery(name = "Login.updateLastOnline", 
        query = "UPDATE Login l SET l.lastOnline = :newDate WHERE l.loginId = :loginId")
        })
public class Login implements Serializable
{

Es spielt keine Rolle, ob loginId ein Primärschlüssel ist

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X