Сущность JPA для таблицы без первичного ключа - PullRequest
10 голосов
/ 05 июля 2010

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

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

Ответы [ 2 ]

8 голосов
/ 05 июля 2010

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

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

2 голосов
/ 05 июля 2010

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 первичным ключом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...