У меня есть таблица MySQL без первичного ключа, и я должен отобразить его в объект JPA. Я не могу изменить таблицу всегда.
Поскольку объекты должны иметь первичный ключ, я должен указать тот. Если я уверен, что поле, которое я использую в качестве первичного ключа в объекте (или поля, я должен выбрать использование составного первичного ключа) всегда будет уникальным (и не пустым) в таблице, может то, что таблице не указали первичный ключ в причине CREATE TABLE никакие проблемы?
Верно. JPA не имеет возможности узнать, являются ли столбцы, которые он использует в качестве ПК, на самом деле настоящим ПК в базе данных. Если эти столбцы на практике являются ПК, тогда все должно быть в порядке.
Вы можете потенциально получить некоторые проблемы с производительностью, если столбцы псевдо-PK неправильно проиндексированы, однако - JPA будет выполнять запросы к PK, предполагая, что он будет работать хорошо.
JPA сама по себе не анализирует вашу базу данных. Просто не используйте общие методы, использующие первичный ключ (find / merge / ...), вместо этого используйте именованные запросы, например, используя синтаксис обновления 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
{
Не имеет значения, является ли loginId первичным ключом