2010-07-05 11 views
10

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

Weil 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, wenn ich den kombinierten Primärschlüssel verwende), immer eindeutig (und nicht null) in der Tabelle ist, kann die Tatsache, dass die Tabelle nicht funktioniert Haben Sie keinen Primärschlüssel, der in CREATE TABLE angegeben wurde?

Antwort

8

Das ist richtig. JPA kann nicht 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, dann sollte es in Ordnung sein.

Sie können möglicherweise einige Leistungsprobleme erhalten, wenn die Pseudo-PK-Spalten nicht korrekt indiziert sind, obwohl - JPA Abfragen an den PK unter der Annahme ausführt, dass es gut funktioniert.

2

JPA selbst analysiert Ihre Datenbank nicht. Verwenden Sie keine allgemeinen Methoden, die Primärschlüssel verwenden (find/merge/...), sondern benannte Abfragen, zum Beispiel mit der jpql update-Syntax.

@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 Primärschlüssel

+0

Warum Ursache Probleme finden und zusammenführen könnte, ist? – tputkonen

+0

@tputkonen - vielleicht werde ich nicht explizit darüber schreiben, aber ich habe versucht zu sagen, dass Sie Verwendung verwenden können, finden/zusammenführen, indem Sie JPQL verwenden. – Dewfy

+0

Dem stimme ich zu, es ist nur, dass wir ein merkwürdiges Verhalten bei der Verwendung von Merge mit solchen Tabellen erfahren haben, und es wäre gut, den Grund zu kennen – tputkonen

Verwandte Themen