当前位置: 首页 > 知识库问答 >
问题:

一对一映射-Spring数据JPA Spring Boot

松骏俊
2023-03-14

在spring数据JPA-Spring Boot应用程序中,我需要在两个表之间进行一对一映射。我在

一对一映射Spring数据示例

它运行良好,并在第二个表(图书详细信息)中插入记录。在我的应用程序中,我需要多次更新第二个表中的记录(如示例中所示,不更新pages列)。

我正在读取book对象,然后更新bookdetail字段,并使用存储库(extends Crudepository)将其保存回原处。

如果我这样做10次,那么bookdetail表对于同一本书有10条记录,并且在book表中,它引用了该书上次更新的bookdetail记录的键值。但我需要在bookdetail中更新相同的记录。bookdetail中的一条记录对应Book中的一条记录。

//对于//实际应用程序代码流中的同一本书,此块可以在同一线程中执行n次

// book = retrieve from Book repo
            if(book.getBookDetail() == null){
                System.out.println("NO BookDetail ");
                BookDetail bookDetail = new BookDetail();
                bookDetail.set...(123)
                book.setBookDetail(bookDetail);
            }else{ 
                book.getBookDetail().set...(123)
            }
            bookRepo.save(book);

我到底做错了什么?

添加实体类

public class Book implements Serializable {
    private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int bookId;


@OneToOne(fetch=FetchType.LAZY ,cascade = CascadeType.MERGE)
@JoinColumn(name="detailId")
private BookDetail bookDetail;

//Other fields

//Getter & Setter

}

public class BookDetail {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int detailId;


@Lob
private String data;

@OneToOne(mappedBy="bookDetail")
private Book book;

//Other fields

//Getter & Setter

}

共有1个答案

宦子琪
2023-03-14
bookRepo.save(book);

是否确实要保存书本实体而不更新它?如果您想编辑现有的书籍细节,为什么不编辑引用它的对象,而不是创建一个新的对象?

 类似资料:
  • 有两张数据表,其中A表的某个字段的值指向B表的主键。因为A表的任何一条记录只能对应B表的一条且唯一一条记录,所以称这种 映射为A表对B表数据的一对一映射。(当然,反过来,你也可是说,是B表对A表的一对多映射)。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图, Pet 中就可以有一个字段 master,通过自身的 masterId 指向一个 Master 对象,那么我们说 Pet.

  • 主要内容:@OneToOne示例,程序输出结果一对一映射映射表示一个单值关联,其中一个实体的实例与另一个实体的实例相关联。在这种类型的关联中,源实体的一个实例可以映射到目标实体的一个实例。 完整的项目目录结构如下所示 - @OneToOne示例 在这个例子中,我们将创建一个学生和图书库之间的一对一关系,这样一个学生只能发放一种类型的图书。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,在包下创建一个实体类,含学生ID()和学生姓名

  • 问题内容: 我正在尝试在Hibernate中将一对一关系映射为“零或一个”关系。我想我可能已经找到了使用多对一方法。 A类的映射指定: B类的映射指定: 我想在数据库中找不到B的匹配行时b为null。所以我可以做到这一点(在A类中): 但是,看来b永远不会为空。 我该怎么办? 问题答案: 答案是在A中的多对一语句中添加not-found =“ ignore”: 我尝试按照Rob H的建议,简单地向

  • 有两张数据表,其中A表的某个字段的值指向B表的主键。因为B表的任何一条记录理论上可以对应A表的多条记录,所以称这种 映射为B表对A表数据的一对多映射。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图,一个 Master 自然就能对应多个 Pet ,所以, Master.pets (一个 List<Pet>) 就可以指向多个 Pet 对象, 那么我们说 Master.pets 就是

  • 如何定义两个类之间的< code >一对一关系?我想我在某个地方出了问题,在概念上。我不知道是什么,但确实是。 让我们假设有两个类命名为 和 : 现在对于一个国家来说,只能有一个PM,PM只能属于一个国家。如何在映射文件中执行此操作? 我在尝试这个: 但是这种有效的映射只会在运行时产生异常。它说属性在类中找不到!但是它在类中搜索吗?它应该在类中搜索。 也帮我完成这两个类之间的< code >一对一

  • 所有者实体: PriceListItemTest.java 和实体2: ItemDetailTest.java RestController在检索JSON结果时返回错误。 可能是地图错了 如果它有oneToone映射,但面临OneToMany的问题,则工作正常。有人能帮我解决这个错误吗? 编辑:控制器: