Объект 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 основным ключом