java - Hibernate:使用外主键保存实体

标签 java spring hibernate

我有一个包含两个实体(产品反馈)的数据库。 Feedback 有一个引用 Product 的外键,其主键是整数。因此,它们处于一对一的关系

我想使用我的网络应用程序向数据库添加一个新的反馈条目。 为此,我尝试从 Angular 客户端应用程序向 Spring 服务器执行 PUT 请求

客户端有一个类 Feedback 的对象具有以下属性( Feedback.ts 的内容)

export class Feedback {
  constructor(
    public productId: number,
    public score: number,
    public preferred: boolean,
    public textNote: string
  ) {
  }
}

类(class)Feedback.java ,服务器端:

@Entity
@Table(name = "feedback")
public class Feedback implements Serializable {
    @Id
    @JoinColumn(name = "product", unique = true)
    @OneToOne(cascade = CascadeType.ALL)
    private Product product;

    @Column(name = "score")
    private double score;

    @Column(name = "preferred")
    private boolean preferred;

    @Column(name = "textnote")
    private String textNote;

    // ... getters, setters, constructor

}

如您所见,有一个不匹配的属性:productIdnumber ,而product属于类别Product 。我怎样才能给Spring应用程序正确的对象,以便save它在数据库中吗?

我正在尝试遵循 Hibernate 指南,据我所知,在 int 类型的 java 类中使用属​​性是一种不好的做法。而不是Product 。我该怎么办?

最佳答案

您使用 FE 中的 ProductId 创建一个新产品。现在您可以创建一个设置了所有类型的新反馈对象。然后您可以将其存储在数据库中。

[编辑]

通常,您在后端有数据传输对象(DTO)。顾名思义,这些传输数据不会执行其他任何操作。后端的端点将始终获得与 FE 中相同的 DTO。根据您的情况,创建一个 FeedbackDto。

public class FeedbackDto {
   Long productId;
   Double score;
   Boolean preferred;
   String textNote;
}

端点将接收该对象,该对象与来自 FE 的反馈具有相同的字段。 Spring 将根据请求的 JSON 正文中的值创建并填充对象

从 FeedbackDto 您现在创建一个 Feedback 实体:

new Feedback(new Product(feedbackDto.productId), feedbackDto.score, feedbackDto.preferred, feedbackDto.textNote)

现在您可以将此反馈实体保存到数据库中。

关于java - Hibernate:使用外主键保存实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225542/

相关文章:

java - 如何在java中格式化日期范围?

java - 为什么我的 hashmap 只取最后一个条目?

hibernate - JPA2 中是否有 OnDelete 的等效注释

java - 如何持久化 java.util.Currency 之类的类?

java - 在 Spring Security 中列出内存中的用户?

java - Spring 3 AJAX POST 请求与@RequestBody 和@ModelAttribute 以及@SessionAttribute 一起使用?

java - SSL 握手警报 : unrecognized_name error since upgrade to Java 1. 7.0

java - 为什么我在 spring 上下文之外得到关闭的 session

spring - Tomcat启动问题(web.xml)

java - Spring Security自定义身份验证不起作用