Какое решение является хорошей практикой сохранения данных в спящем режиме? - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть две сущности, которые являются сущностями ученика и класса.Студент и класс много-к-одному.Таким образом, ученик содержит атрибут класса.

Теперь я хочу сохранить или создать связь ученика с существующим классом (значит, я уже знаю идентификатор первичного ключа).

Решение 1:

Student student = new Student();
Class class = session.load(classId);  
student.setClass(class);
session.save(student);

Решение 2:

Student student = new Student();
Class class = new Class();
class.setClassId(classId);
student.setClass(class);
session.save(student);

Мой вопрос здесь в решении 1, он выдаст два SQL, один - получить класс, другой - вставить студента.Но в решении 2 нужен только один SQL.Если у меня есть больше атрибута класса, я буду загружать и выдавать больше выбора SQL перед вставкой.Кажется, не так эффективно.Есть ли побочный эффект в решении 2?

, какой способ лучше сохранить / вставить?Кстати, я не настраивал каскад.

Спасибо, Йи Чен

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Решение 1 не выдаст SQL-запрос для загрузки Class. В отличие от get(), load() возвращает прокси-объект с указанным идентификатором и не выполняет запрос к базе данных немедленно. Таким образом, метод load() является естественным выбором для этого сценария (когда вам действительно нужно загрузить объект, используйте get()).

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

Итак, я рекомендую вам использовать Решение 1 и не беспокоиться о производительности.

1 голос
/ 27 апреля 2011

Есть ли побочный эффект в растворе 2?

Прежде всего, вы не связали своего ученика с каким-либо классом там.

Во-вторых, откуда вы берете этот идентификатор класса в общем случае? В какой-то более ранний момент времени вам пришлось либо извлечь существующий экземпляр класса из БД, либо создать новый экземпляр и сохранить его, чтобы получить его идентификатор. Конечно, повторное использование сущности, которая у вас уже есть, это хорошо, но жонглирование идентификаторами, как вы делаете выше, ИМХО нет.

В-третьих, не стоит преждевременно оптимизировать ваше приложение. Сначала настройте его на правильную работу, затем измерьте производительность и оптимизируйте только тогда и только тогда, когда это необходимо.

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