отказ от ответственности: верно следующее для политики отслеживания изменений по умолчанию (неявно)
flush
по определению записывает любые изменения, сделанные в управляемых объектах, в базу данных.
Сохранение сущности делает ее управляемой и, таким образом, любые изменения в ней, даже если они должны быть «временными», будут сохраняться на flush
(как А.Марван уже указывал в комментарии).
Поскольку семантика очень ясна, я бы посоветовал не устанавливать временные значения для полей, которые управляются (любое сопоставленное поле). Либо добавьте временное свойство для этого, либо переоцените подход - возможно, службу или оболочку, либо что-либо еще, более подходящее вашему варианту использования.
комментарий для изменения политики отслеживания:
Ответ Rikudou_Sennin предлагает технически правильное решение технической проблемы, при котором сущности сохраняются, когда разработчик может этого не хотеть ... путем изменения политики отслеживания изменений. ИМХО, это семантически зло , ... хорошо, давайте назовем это проблематичным.
Как разработчик, я бы всегда предполагал, что объекты имеют согласованное состояние - даже если они еще не сброшены в базу данных. Если он имеет состояние, отличное от его постоянной версии, я хочу предположить, что когда запрос выполнен, и все или никакие измененных объектов записаны в базу данных, база данных находится в согласованном состоянии. государство. «Нет» можно считать данным. «Все» достаточно сложно обдумать.
Однако, с другой политикой отслеживания изменений и неявной возможностью, что «грязный» никогда не заслуживающий доверия объект может вращаться со значениями, на которые разработчик никак не может положиться, потому что неясно, если объект будет сохраняться или нет, или, возможно, был сохранен. Это только добавляет больше (ненужных) сомнений. Это также является дополнительным источником трудных для отладки ошибок.
Сводка опций:
- добавление временного поля (или дополнительного var / object или чего-либо еще): разумные усилия и не влияющие на семантику (и предположения) *
- изменение политики отслеживания и неправильное использование поля: низкие усилия при первом использовании, неизвестные (возможно, непостижимые) будущие усилия (и), потеря семантики и допущений (должны требовать явно заявленных гарантий, и даже тогда!).
*) предполагает несколько чистый и правильно структурированный код с неповрежденной и бескомпромиссной семантикой.