Создание экземпляра объекта в Spring без какого-либо взаимодействия с Spring

#java #spring #spring-boot #spring-data-jpa #spring-data

#java #spring #spring-boot #spring-data-jpa #spring-данные

Вопрос:

В моем проекте, основанном на spring-data-rest , у меня есть несколько классов, аннотированных @Entity аннотацией.

 @Entity
@Table(name = "my_table)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyTable extends BaseTableEntity {
    private String name;
    private String description;
}
 

Теперь я не совсем уверен в том, как Spring обрабатывает создание новых экземпляров классов, аннотированных этой аннотацией. Мне нужно было создать объект такого Entity класса, чтобы убедиться, что никаких операций с базой данных не выполняется.

Чтобы было понятно, скажем, я делаю MyTable table = new MyTable() в классе POJO. Могу ли я быть уверен, что Spring с помощью Hibernate / JPA не создаст записи в моей базе данных. Что, если я сделаю то же самое в @Component классе вместо POJO.

Комментарии:

1. удалите @Table и убедитесь, что вы не разрешили создание таблицы в файле свойств

2. Короткий ответ: да, вы можете быть уверены.

3. @SyedMehtabHassan Не могли бы вы немного уточнить? У меня есть @Table аннотация, поскольку я хочу управлять автоматическим созданием таблиц для этих объектов. Просто иногда я хочу создать POJO из того же аннотированного класса, не беспокоясь о базе данных.

4. @Andronicus Итак, я могу быть уверен, что если я этого не сделаю MyTableRepository.save(table) , table Spring не будет отслеживать объект на предмет обновлений и прочего.

5. @SayakMukhopadhyay да, смотрите мой ответ;)

Ответ №1:

Создание нового объекта с new ключевым словом не делает никакой вставки в БД. Объект находится в отключенном состоянии. Вам нужно будет передать этот объект reporitory.save или entityManager.persist или entityManager.merge … Но пока persist не вызывается (прямо или косвенно), это обычный pojo без представления в базе данных.

Комментарии:

1. А что в случае загрузки данных?

2. Что вы имеете в виду? Если вы загружаете что-то из базы данных, вам нужно вызвать entityManager.detach(entity);