Объект JPA для таблицы без первичного ключа

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

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

Ответ 1

Это правильно. JPA не знает, использует ли столбец (-ы), используемый в качестве PK, реальный 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 основным ключом