Spring / JPA:保存具有关联实体的实体

时间:2018-08-29 17:59:53

标签: spring jpa spring-data-jpa

我有以下实体:产品和过道。一种产品可以位于一个或多个通道中,而一个通道可以具有一个或多个产品。 和一个实体推销员。推销员负责通道中的产品:

@Entity 
public class Product{
   @Id
   private Long id;
   private String name;
   @OneToMany(mappedBy = "product")
   private Set<ProductAisle> productAisle = new HashSet<>;
   /* getters, setters, equals and hashcode */
}


@Entity 
public class Aisle{
   @Id
   private Long id;
   private String row;
   private String shelf;
   @OneToMany(mappedBy = "aisle")
   private Set<ProductAisle> productAisle = new HashSet<>();
   /* getters, setters, equals and hashcode */
}

@Entity 
public class ProductAisle{
   @Id
   private Long id;
   @ManyToOne(fetch = FetchType.LAZY)
   private Product product;
   @ManyToOne(fetch = FetchType.LAZY)
   private Aisle aisle;
   /* getters, setters, equals and hashcode */
}
@Entity 
public class Salesman{
   @Id
   private Long id;

   private String name;

   @ManyToOne(fetch = FetchType.LAZY)
   private Set<ProductAisle> productAisle;

}

为简单起见,我通过扩展JpaRepositoryClass为每个实体创建了一个存储库:

public interface SalesmanRepo extends JpaRepository<Salesman, Long>{}
public interface ProductAisleRepo extends JpaRepository<ProductAisle, Long>{}
public interface AisleRepo extends JpaRepository<Aisle, Long>{}
public interface ProductRepo extends JpaRepository<Product, Long>{}

问题在于我觉得这不是要走的路。 例如,当我尝试添加Salesman时,我需要检查Product是否存在。如果没有,我将其保留在其存储库中。 然后,我必须检查Aisle是否存在。如果没有,我将通过它的存储库坚持下去。 接下来,我必须在ProductAisle存储库中找到一条记录或创建一条。 最后,我可以保存Salesman

问题:是保存与关联实体联接的实体的方法吗?是否可以不进行所有检查就保存主实体(Salesman)?

致谢

1 个答案:

答案 0 :(得分:0)

我可能没有100%跟踪您的问题;但这听起来像您在插入其他实体时要创建依赖实体吗?

在这种情况下,您可以尝试:层叠= CascadeType.PERSIST。这里有一个相关答案中的注释:https://stackoverflow.com/a/33786248/857994

此外,这是一个链接:https://docs.oracle.com/cd/E19798-01/821-1841/bnbqm/index.html解释:

  

PERSIST-如果父实体被持久化到持久化上下文中,则相关实体也将被持久化。

相关问题