休眠:使用外键保存实体

Robb1:

我有一个包含两个实体(ProductFeedback的数据库反馈有一个引用产品的单个外键,其主键是整数。因此,它们之间是一对一的关系

我想通过我的Web应用程序向数据库添加新的“ 反馈”条目。为此,我试图从Angular客户端应用程序向Spring服务器执行PUT请求

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

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

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

}

如您所见,有一个不匹配的属性:productIdis是一个number,而productis是类Product如何save在数据库中为Spring应用程序提供正确的对象以使其正确

我正在尝试遵循Hibernate准则,据我所知,在类型的Java类中使用属​​性int代替会是一个不好的做法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)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章