Проверка Spring-Data @Version-Property не работает с примитивами для обнаружения состояния объекта.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проверка Spring-Data @Version-Property не работает с примитивами для обнаружения состояния объекта.

Сообщение Anonymous »

Из официальной документации:

Если свойство, помеченное @Version, присутствует и имеет значение null, или в случае свойства версии примитива введите 0, объект считается новым. Если свойство версии присутствует, но имеет другое значение, объект не считается новым.
Насколько я понимаю, Spring будет использовать даже примитивное поле версии, чтобы проверить, является ли объект новым или нет.
Однако в моем тестировании, если я создаю объект с примитивным полем версии, вручную устанавливаю идентификатор и пытаюсь сохранить (JpaRepository.save()) , Spring по-прежнему вызывает em.merge() (а не просто сохраняться), что приводит к дополнительному запросу выбора.

Изменение типа на Integer решает проблему.
Пример объекта:< /p>

Код: Выделить всё

//...other imports
import javax.persistence.Version;

@Entity
@Table(name = "test")
public class Test implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

@Id
private Long id;

@Version
@NotNull
@Column(name = "entity_version")
private int entityVersion;
}
Более того, просматривая исходники, я нахожу этот блок кода:

Код: Выделить всё

@Override
public boolean isNew(T entity) {

if (versionAttribute.isEmpty() ||
versionAttribute.map(Attribute::getJavaType).map(Class::isPrimitive).orElse(false)) {
return super.isNew(entity);
}

BeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity);

return versionAttribute.map(it -> wrapper.getPropertyValue(it.getName()) == null).orElse(true);
}
Если я правильно понимаю, он проверяет, имеет ли поле версии примитивный тип, и если да, просто вызывает метод super.isNew(), который проверяет только идентификатор.
Если я правильно понял, он проверяет, имеет ли поле версии примитивный тип, и если да, просто вызывает метод super.isNew(), который проверяет только идентификатор.
p>
Я что-то упустил?


Подробнее здесь: https://stackoverflow.com/questions/793 ... -for-entit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»