Изменение результатов внешнего ключа в новой строке - PullRequest
0 голосов
/ 17 февраля 2011

В настоящее время я работаю над своим первым Java-приложением, основанным на базе данных MySQL. Я использую EclipseLink2.0 и NetBeans, в то время как я сталкиваюсь с поведением, которое я не могу объяснить, возможно, кто-то сталкивался с этой проблемой в прошлом и может помочь мне в этом. Здесь идет:

Таблица 1 имеет PK таблицы 2 как Fk. На стороне приложения есть пользовательский интерфейс, в котором пользователи могут создавать контент для таблицы 1. Значение fk (Table2ID) выбирается из выпадающего меню, которое получает каждое значение путем чтения коллекции строк таблицы 2. Теперь, когда я пытаюсь изменить значение для fk на другое (уже существующее) значение, вместо того, чтобы просто сделать это, в table2 генерируется новая строка со свежим идентификатором, все остальные значения столбца клонируются из строки, которую я пытался изменить Fk на. Так, например, когда я пытаюсь установить для строк table1 3,4 и 5 значение table1.fkcolumn = 6 (т.е. Table2ID = 6), программа вместо этого клонирует строку с ID = 6 3 раза и устанавливает для каждого из столбцов table1 значение один из них.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 04 марта 2011

Проблема в том, что вы меняете первичный ключ объекта. В EclipseLink, когда вы меняете PK объекта, у вас появляется новый объект. Таким образом, Eclipselink вставляет новые строки и оставляет старые строки в покое.

Чтобы обойти это, у вас есть три варианта: 1) Изменить базу данных. Первичные ключи действительно не должны быть изменены. 2) Настройте приложение на выполнение запроса на обновление, который изменяет значения первичного ключа и запрашивает их. 3) Удалите старые строки и заново создайте новый первичный ключ.

...