У меня есть таблица, в которой нет Primary Key. Она не обязана содержать уникальные данные как в любом из полей, так и в любом их сочетании, т.е. я не могу даже сделать Composite Primary Key. Мне надо вычитывать из неё строки по одной, желательно в порядке их добавления (но не обязательно, можно и в произвольном порядке).
Все примеры со Spring Data JPA что я видел основаны на Entity, т.е. обязаны иметь уникальный ID, что в данном случае неприменимо.
Вопрос: можно ли работать с такой таблицей средствами Spring Data (кроме как написанием прямого SQL-запроса)?
If your table truly has no unique columns, then use all of the columns as the id. Typically when this occurs the data is read-only, so even if the table allows duplicate rows with the same values, the objects will be the same anyway, so it does not matter that JPA thinks they are the same object. The issue with allowing updates and deletes is that there is no way to uniquely identify the object's row, so all of the matching rows will be updated or deleted.
То есть работать можно будет, с одним ограничением - все одинаковые записи будут "схлопываться" в одну. Но, учитывая
Вообще-то не обязательно. Например, бывают таблицы, предназначенные для связи сущностей (many-to-many) и у них нет ID.
В моём случае в эту таблицу прилетают "события", которые я обрабатываю. Строки с одинаковыми данными - однотипные события, каждое последующее гарантировано "перекрывает" предыдущее. Значит из кучки одинаковых событий мне достаточно обработать одно. После обработки событие из этой таблицы удаляется (т.е. убьются все одинаковые строки).
Таблица мне дана как данность, на которую я не могу повлиять, поэтому вопрос "почему так, а не иначе" не стоит :)
сейчас будет для тебя шок контент. Так везде! Например ты редактируешь свои данные в вк или банке, никто их не удаляет, а создают новую запись, а в той делают отметку о неактивности
Jacen11, вообще-то, наличие ключа действительно не обязательно. Конечно, это вызывает вопрос к создателю "а почему именно так?", но, чисто формально, вполне можно создать таблицу без primary key.
БД все равно будет иметь какой-то внутренний идентификатор для каждой записи, но будет ли он доступен (типа OID в postgres), это далеко не факт.