2010-07-05 6 views
10

У меня есть таблица MySQL без первичного ключа, и я должен сопоставить ее с сущностью JPA. Я никак не могу изменить таблицу.JPA-объект для таблицы без первичного ключа

Поскольку объекты должны иметь первичный ключ, я должен указать его. Если я уверен, что поле, которое я использую в качестве первичного ключа в сущности (или поля, следует выбрать для использования составного первичного ключа), всегда будет уникальным (а не нулевым) в таблице, может ли тот факт, что таблица У вас есть первичный ключ, указанный в CREATE TABLE, из-за каких-либо проблем?

ответ

8

Это правильно. JPA не знает, использует ли столбец (-ы), используемый в качестве PK, реальный PK в базе данных. Если эти столбцы (ы) на практике являются ПК, то это должно быть хорошо.

Возможно, у вас могут возникнуть проблемы с производительностью, если столбцы псевдо-PK некорректно проиндексированы, хотя JPA будет выполнять запросы против ПК в предположении, что он будет работать хорошо.

2

JPA сам не анализирует вашу базу данных. Просто не используйте общие методы с использованием первичного ключа (find/merge/...) вместо использования именованных запросов, например, используя синтаксис 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 
{ 

Это не имеет значения, если LoginID является первичным ключом

+0

Почему бы найти и объединить вызвать проблемы? – tputkonen

+0

@tputkonen - может быть, я не пишу о них явно, но я попытался сказать, что вы можете избежать использования find/merge с помощью JPQL. – Dewfy

+0

Я согласен с этим, просто мы столкнулись с каким-то странным поведением при использовании слияния с такими таблицами, и было бы полезно знать причину. – tputkonen

Смежные вопросы