我有一个包含两个实体(产品和反馈)的数据库。反馈有一个引用Product的外键,其主键是整数。因此,它们之间是一对一的关系。
我想通过我的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
}
如您所见,存在一个不匹配的属性:
productId
是number
,而product
是Product
类。如何为Spring应用程序提供正确的对象,以便在数据库中save
?我正在尝试遵循Hibernate准则,据我所知,在类型为
int
的java类而不是Product
的Java类中使用属性将是一种不好的做法。我该怎么办? 最佳答案
您从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/