Как вставить сущность в конце таблицы с помощью JPA? - PullRequest
0 голосов
/ 31 декабря 2010

Всем привет и с новым годом.

Мне нужно вставить запись в конец таблицы (для таблицы не задан автоинкремент) с использованием JPA.

Я знаю, что могу получить последний идентификатор (целое число) и применить к сущности перед вставкой, но как это можно сделать? Какой способ будет наиболее эффективным?

Ответы [ 2 ]

3 голосов
/ 31 декабря 2010

Нет такой вещи как "конец стола".Строки в реляционной таблице не отсортированы .

Просто вставьте новую строку.Если вам нужен какой-то конкретный порядок, вам нужно применить ORDER BY при выборе строк из таблицы.

Если вы говорите о создании нового идентификатора, используйте последовательность Oracle.Это гарантирует уникальность.

Я бы не рекомендовал использовать «таблицу счетчиков».Это решение либо не масштабируется (если оно правильно реализовано), либо небезопасно (если оно масштабируется).

Для этого и были созданы последовательности.Я не знаю JPA, но если вы не можете получить идентификатор из последовательности, я предлагаю вам найти лучший ORM.

2 голосов
/ 31 декабря 2010

Ну, хотя я не знаю, где на самом деле находится конец таблицы, у JPA есть много вариантов подключения генераторов идентификаторов.

Одним из распространенных вариантов является использование собственной таблицы, содержащей счетчик для каждой сущности, для которой требуется идентификатор (от http://download.oracle.com/docs/cd/B32110_01/web.1013/b28221/cmp30cfg001.htm).

@Id(generate=TABLE, generator="ADDRESS_TABLE_GENERATOR")
@TableGenerator(
name="ADDRESS_TABLE_GENERATOR", 
    tableName="EMPLOYEE_GENERATOR_TABLE", 
    pkColumnValue="ADDRESS_SEQ"
)
@Column(name="ADDRESS_ID")
public Integer getId() {
    return id;
 }

... другие стратегии "Генератора", которые нужно гуглить ...

EDIT

Смею сослаться на @a_horse_with_no_name, поскольку он говорит, что не знает о JPA. Если вы хотите использовать собственные механизмы, такие как sequence (которые доступны не в каждой БД), вы можете объявить такой генератор и в JPA.

Я не знаю, с какими проблемами он столкнулся при использовании табличного подхода - я знаю, что крупные установки успешно работают. Но в любом случае, это зависит от множества факторов, помимо масштабируемости, например, если вы хотите, чтобы это было переносимо и т. Д. Просто найдите различные стратегии и выберите подходящую.

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