spring-boot - Spring Data JPA - 一对一映射双向
问题描述
我有一个叫做符号和符号历史的表,
Symbols
symbols(Pk)
SymbolsHistorical
id
symbols
Forign key name - symbols_fk (FK)
我创建了我的 HibernateMapping 并在我的 DTO 类中,
在 SymbolsHistical 中,
@OneToOne
@JoinColumn(foreignKey = @ForeignKey(name = "symbols_fk"))
private Symbols symbol;
我在符号课上做过,
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;
每当我需要阅读符号时,我也需要它的symbolsHistorical,
我正在使用 findBySymbol 方法获取符号数据。每当我进行上述映射时,都会得到“字段列表”中的未知列“symbols0_.symbols_historical_id”
做错了什么?
更新:
Error
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
[2m2021-07-05 15:31:29.458[0;39m [31mERROR[0;39m [35m76390[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36ms.e.ErrorMvcAutoConfiguration$StaticView[0;39m [2m:[0;39m Cannot render error page for request [/symbols/A] and exception [] as the response has already been committed. As a result, the response may have the wrong status code.
解决方案
从您的表中获取的外键名称是符号。
所以映射必须在Symbols
类中:
@OneToOne
@JoinColumn(name="symbols")
private Symbols symbol;
当您使用 JSON 序列化时,由于双向映射,您将收到 StackOverflowError。
因此,您必须向Symbol
orSymbolsHistorical
类添加注释(取决于您要序列化的内容)以打破循环。
例如
@JsonBackReference // this property will not be serialized
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;
推荐阅读
- r - how to read superscripts from excel with out changing format into r-markdown pdf?
- python - 如何用熊猫附加两列?
- python - roc_auc_score 用于多类分类,AxisError:轴 1 超出了维度 1 数组的范围
- angular - 禁用的属性在按钮的角度不起作用
- python - python的panda中的合并排序如何按列对excel文件进行排序?
- text - 为什么我们不能在文本编辑器中使用内置文本框
- java - Spring 5.3.7 中 locatorFactorySelector 的任何替换
- javascript - 未达到事件侦听器内部的 JS for 循环
- sabre - 查询酒店/航班/游轮价格时,货币代码如何处理?
- postgresql - PG查询函数杀死AWS lambda