【问题标题】:Creating an instance of Entity in Spring without any Spring interaction在没有任何 Spring 交互的情况下在 Spring 中创建实体实例
【发布时间】:2019-04-16 17:53:24
【问题描述】:

在我基于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 类的对象,确保不会发生任何数据库操作。

为了清楚起见,假设我在 POJO 类中做MyTable table = new MyTable()。我可以确定 Spring 在 Hibernate/JPA 的帮助下不会在我的数据库中创建记录。如果我在 @Component 类而不是 POJO 中做同样的事情会怎样。

【问题讨论】:

  • 删除@Table 并确保您不允许在属性文件中创建表
  • 简短回答:是的,您可以确定。
  • @SyedMehtabHassan 你能详细说明一下吗?我有 @Table 注释,因为我想管理这些实体的自动表创建。只是有时我想从同一个带注释的类中创建一个 POJO,而不用担心数据库。
  • @Andronicus 所以,我可以肯定,除非我这样做 MyTableRepository.save(table),否则 Spring 不会监视 table 对象的更新和内容。
  • @SayakMukhopadhyay 是的,看看我的回答;)

标签: java spring spring-boot spring-data-jpa spring-data


【解决方案1】:

使用new 关键字创建新实体不会对数据库进行任何插入。实体处于分离状态。您必须将此实体传递给 reporitory.saveentityManager.persistentityManager.merge... 但只要不调用(直接或间接)persist,它就是一个没有在数据库中表示的常规 pojo。

【讨论】:

  • 如果加载数据呢?
  • 什么意思?如果你从数据库加载一些东西,你需要调用entityManager.detach(entity);
猜你喜欢
  • 2012-10-22
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-12
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多