【问题标题】:Spring data rest managing all entities with one crud repositorySpring 数据通过一个 crud 存储库管理所有实体
【发布时间】:2018-04-22 05:31:40
【问题描述】:

我需要知道是否有可能在 spring data rest 中使用一个 crud 存储库管理多个实体。

例子:

图书馆实体

@Entity
public class Library {

    @Id
    @GeneratedValue
    private long id;

    @Column
    private String name;

    @OneToMany(mappedBy = "library")
    private List<Book> books;
}

图书实体

@Entity
public class Book {

    @Id
    @GeneratedValue
    private long id;

    @Column(nullable=false)
    private String title;

    @ManyToOne
    @JoinColumn(name="library_id")
    private Library library;

}

我的要求是

public interface LibraryRepository extends CrudRepository<Library, Long> { }

只有这个存储库来管理图书馆和图书实体。

我尝试插入,到目前为止它运行良好。但此方法不支持其他操作。除了拥有两个 crud 存储库之外,还有其他方法吗?

【问题讨论】:

  • 你不能。您需要为每个实体创建单独的 Repository 接口,因为每个特定的存储库都负责将其数据库数据转换为其相应的 java 对象。
  • 您对哪些操作有疑问?除了添加其他地方建议的级联操作外,请参见此处:stackoverflow.com/questions/30464782/…

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


【解决方案1】:

您不能简单地这样做,因为将为每个存储库创建一个 bean,并且该 bean 应该使用定义的实体类型进行实例化

【讨论】:

  • 那么如何插入
  • @MaxExplode 检查 CrudRepository 的定义,docs.spring.io/spring-data/commons/docs/current/api/org/…,它带有两个 Generics ,因此在实例化它时您需要指定这些泛型,并且在创建 bean 时定义的类型将随bean ,所以保存方法是 save(S entity) 其中 S 是实体,因此当您使用实体 X 定义 CrudRepository 时,save 将被定义为 save(X entity)
【解决方案2】:

当然可以。只需像这样更正您的图书馆:

@OneToMany(mappedBy = "library", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Book> books;

然后您可以使用此有效负载创建/更新您的图书馆及其书籍:

{
    "name": "library1",
    "books": [
        {
            "title": "book1"
        },
        {
            "title": "book2"
        }
    ]
}

Spring Data 作者的代码example

我的example

【讨论】:

  • 与 restbucks 示例不同,提问者的模型具有双向关系,除非发生变化,否则对于 rest 存储库来说是有问题的。 stackoverflow.com/questions/30464782/… 在你的例子中你是如何处理的?
  • @AlanHay 我同意这里不需要双向关系。我知道你指出的问题。在我的示例中,我将implemented setItems(List&lt;MenuItem&gt; items) 同步MenuMenuItemadded 两个注释@RestResource(exported = false)@JsonIgnoreMenuItem 中的菜单getter,以避免响应正文中不必要的Menu 数据.
猜你喜欢
  • 2013-05-09
  • 2021-05-14
  • 2019-05-10
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2021-04-27
  • 1970-01-01
相关资源
最近更新 更多