#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);