我有以下实体:产品和过道。一种产品可以位于一个或多个通道中,而一个通道可以具有一个或多个产品。 和一个实体推销员。推销员负责通道中的产品:
@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
)?
致谢
答案 0 :(得分:0)
我可能没有100%跟踪您的问题;但这听起来像您在插入其他实体时要创建依赖实体吗?
在这种情况下,您可以尝试:层叠= CascadeType.PERSIST。这里有一个相关答案中的注释:https://stackoverflow.com/a/33786248/857994。
此外,这是一个链接:https://docs.oracle.com/cd/E19798-01/821-1841/bnbqm/index.html解释:
PERSIST-如果父实体被持久化到持久化上下文中,则相关实体也将被持久化。