java - Hibernate:使用外主键保存实体
问题描述
我有一个包含两个实体(产品和反馈)的数据库。反馈有一个引用 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
is a number
,而product
is of class Product
。如何save
在数据库中为 Spring 应用程序提供正确的对象?
我正在尝试遵循 Hibernate 指南,据我所知,在 java 类型的类中使用属性int
而不是Product
. 我应该怎么办?
解决方案
您使用来自 FE 的 productId 创建一个新产品。现在您可以创建一个设置了所有类型的新反馈对象。然后,您可以将其存储在数据库中。
[编辑]
通常,您在后端有数据传输对象 (DTO)。顾名思义,这些将传输数据不做任何其他事情。后端中的端点将始终获得与 FE 中相同的 DTO。在您的情况下,创建一个 FeedbackDto。
public class FeedbackDto {
Long productId;
Double score;
Boolean preferred;
String textNote;
}
Endpoint 将收到这个与 FE 反馈具有相同字段的对象。Spring 将根据请求的 JSON 正文中的值创建并填充对象
从 FeedbackD 到您现在创建一个反馈实体:
new Feedback(new Product(feedbackDto.productId), feedbackDto.score, feedbackDto.preferred, feedbackDto.textNote)
现在您可以将此反馈实体保存到您的数据库中。
推荐阅读
- image-processing - 如何使用 Python 显示数字高程模型 (DEM) (.raw)?
- django - 遍历查询集并比较查询集
- c# - 实例化预制件的问题。ArgumentException:已添加具有相同键的项目
- iis - 无法在 Windows 服务器上安装 Web 部署,安装程序找不到“Visual Studio 2015 更新 2”和“Visual Studio 2015”
- twitter - 如何使用 cefsharp 点赞和转发?
- java - 从数据库返回列表
- python - 计算步数达到 0 的函数
- zurb-foundation - 有没有办法在页面顶部有一个带有标题图像的顶栏?
- tsql - 如何在 SQL Server 中加入客户记录以显示缺少的交易类型
- java - 更新配置有 delete orphan 的集合时出现 HibernateException:无法保存父对象