是否有JPA查询方法来检查实体是否在其收集字段中包含另一个特定实体?

时间:2019-04-06 15:49:36

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

我正在设计一个简单的Spring Boot应用程序。基本上是图书馆。域如下所示: 一个库可以有许多用户分配给它。 图书馆也有书。 如果要删除一本书,我们会收到该书的ID以及希望删除它的用户。 然后,我们需要检查该书是否在Users库中。只有这样才能将其删除。

我用Java解决了这个问题,但是琐碎,我意识到这种解决方案远非最佳。

要求该程序仅接收用户实体和书籍ID。我们要验证用户是否有权删除这本书。

图书馆

@Entity
@Table(name = "library")
public class Library {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Size(max = 100)
    private String name;

    @OneToMany(mappedBy = "library", cascade = CascadeType.ALL)
    private Set<User> users;

    @OneToMany(fetch = FetchType.LAZY)
    private Set<Book> books;

...accessor methods omitted for brevity...

}

@Entity
@Table(name = "books")
public class Product implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Size(max = 100)
    private String name;

    private int quantity;

...accessor methods omitted for brevity...

}

用户

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Size(max = 40)
    private String name;

    @NotBlank
    @Size(max = 15)
    private String username;

    @NaturalId
    @NotBlank
    @Size(max = 40)
    @Email
    private String email;

    @NotBlank
    @Size(max = 100)
    private String password;

    @NotNull
    @ManyToOne
    @JoinColumn
    private Library library;

...accessor methods omitted for brevity...

}

我意识到有多种方法可以使用HQL和条件构建器来创建查询。我想知道是否可以使用JpaRepository接口方法名称(findByUsername ...等)。

我也不完全确定自己在正确建立实体关系以使其正常工作。

在我看来,这是一个微不足道的问题,但我找不到解决该问题的“最佳实践”或“最新”答案。

0 个答案:

没有答案