当前位置: 首页 > 面试题库 >

Spring Data Rest通过一个Crud存储库管理所有实体

薛云瀚
2023-03-14
问题内容

我需要知道是否有可能在Spring数据其余部分中使用一个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> { }

只能使用该存储库来管理图书馆和图书实体。

我尝试插入,到目前为止效果很好。但是此方法不支持其他操作。还有什么其他方法,而不是有两个原始存储库来完成。


问题答案:

当然可以。像这样修改一下您的资料库:

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

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

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

Spring Data作者的代码示例。

我的例子。



 类似资料:
  • 我不想公开我的模型类(jpa实体),而是用不同的数据传输对象(DTO)公开它们属性的不同子集。这个想法是不切实际的 例子: 实体: JpaRepository: DTO: D到积垢积存物: 实施: 一般: 在本例中,我想用Spring数据REST公开GroupDtoDao。 在其他bean中,我可以自动连接GroupDto和GroupDto,所以两者都由Spring的上下文管理。如果我不使用@Re

  • 目前,我们使用JJB编译Jenkins作业(大部分已经是管道),以便配置大约700个作业,但JJB2似乎无法很好地扩展以构建管道,我正在寻找一种方法将其从等式中删除。 我主要希望能够将所有这些管道存储在一个集中的存储库中。 请注意,在我们的用例中,将CI配置(jenkins文件)保存在每个存储库和分支中是不可能的,我们需要将所有管道保存在一个“jenkins jobs.git”repo中。

  • 我有一个相当大的实体,有许多字段和几个与该实体交互的方法。当两个线程同时从数据库中读取数据时,存在不可重复读取的问题,其中一个线程更改了一个字段并保存了实体,而另一个线程同时读取了旧值的数据并没有更改并保存。我想的第一个解决方案是将事务隔离级别改为可重复读取,但这可能会对我的应用程序的性能产生巨大影响。我只需要在第二个方法中忽略一个字段,但在第一个方法中更改它,所以@transient注释在这里不

  • 我正在工作的Spring引导应用程序。 我们有服务层、Rest控制器和Dao作为存储库。 我想做的是,我将编写一个扩展CrudRepository的BaseRepository,BaseRepository应该接受所有的实体并执行持久操作。 有办法吗??

  • 将现有存储库数据库迁移到其他数据库可能包括迁移到同一服务器中的其他数据库,或迁移到不同操作系统上的数据库(例如,从 Windows 到 macOS)。 如果你想迁移你的存储库数据库,请按照下列步骤操作: 通过运行命令,或使用通知区域或菜单栏中的图标来停止 Navicat Monitor 服务。 在你的数据库管理工具中,将当前的存储库数据库(所有表的结构和数据)复制到新的存储库数据库。 启动 Nav

  • 我无法访问托管密钥库中的存储帐户密钥。下面是我的代码: 似乎$secret.secretValueText为空/null。如何正确检索存储帐户密钥?这就是出现的错误。