2010-07-05 77 views
10

Tengo una tabla MySQL sin clave principal, y tengo que asignarla a una entidad JPA. No puedo modificar la tabla de ninguna manera.Entidad JPA para una tabla sin clave primaria

Como las entidades deben tener una clave principal, debo especificar una. Si estoy seguro de que el campo que uso como clave principal en la entidad (o los campos, si opto por usar la clave primaria compuesta) siempre será único (y no nulo) en la tabla, ¿puede el hecho de que la tabla no lo haga? ¿Tiene una clave principal especificada en CREATE TABLE que cause problemas?

Respuesta

8

Eso es correcto. JPA no tiene manera de saber si la (s) columna (s) que está utilizando como PK es realmente un PK real en la base de datos. Si esas columnas son, en la práctica, un PK, entonces debería estar bien.

Es posible que se produzcan algunos problemas de rendimiento si las columnas pseudo-PK no están indexadas correctamente, aunque JPA ejecutará consultas contra PK en el supuesto de que funcionará bien.

2

El propio JPA no analiza su base de datos. Simplemente no use métodos comunes usando la clave principal (find/merge/...) en lugar de usar consultas con nombre, por ejemplo usando la sintaxis de actualización de jpql.

@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 
{ 

No importa si es loginid clave

+0

Por qué podría buscar y combinar problemas causa primaria? – tputkonen

+0

@tputkonen - puede ser que no esté explícitamente escrito, pero he intentado decir que usted PUEDE evitar el uso de encontrar/fusionar mediante el uso de JPQL. – Dewfy

+0

Estoy de acuerdo con eso, es solo que hemos experimentado algún comportamiento extraño al usar la fusión con dichas tablas, y sería bueno saber el motivo – tputkonen

Cuestiones relacionadas