2010-07-05 12 views
10

Ho una tabella MySQL, senza chiave primaria, e devo mappare in un'entità JPA. Non riesco a modificare la tabella in alcun modo.JPA entità per una tabella senza chiave primaria

Poiché le entità devono avere una chiave primaria, devo specificare uno. Se sono certo che il campo che uso come chiave primaria nell'entità (o nei campi, dovrei scegliere di usare la chiave primaria composta) sarà sempre univoco (e non nullo) nella tabella, può il fatto che la tabella non lo faccia avere una chiave primaria specificata in CREATE TABLE causa problemi?

risposta

8

Questo è corretto. JPA non ha modo di sapere se la (e) colonna (e) che sta usando come PK è in realtà un PK reale nel database. Se queste colonne sono, in pratica, un PK, allora dovrebbe andare bene.

È possibile che si verifichino alcuni problemi di prestazioni se le colonne pseudo-PK non sono indicizzate correttamente, tuttavia - JPA eseguirà query sul PK supponendo che funzionerà correttamente.

2

JPA in sé non analizza il database. Basta non usare metodi comuni usando la chiave primaria (find/merge/...) invece di usare query con nome, per esempio usando la sintassi di 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 
{ 

Non importa se è LoginID chiave

+0

Perché potrebbero trovare e unire i problemi causa primaria? – tputkonen

+0

@tputkonen - può darsi che io non ne scriva esplicitamente, ma ho cercato di dire che è possibile evitare l'uso di find/merge usando JPQL. – Dewfy

+0

Concordo con questo, è solo che abbiamo sperimentato un comportamento strano quando si utilizza l'unione con tali tabelle, e sarebbe bene sapere il motivo – tputkonen

Problemi correlati