Spring 数据 JPA - 双向一对一映射
Spring Data JPA - one to one mapping bidirectional
我有一个 table 叫做符号和符号历史,
Symbols
symbols(Pk)
SymbolsHistorical
id
symbols
Forign key name - symbols_fk (FK)
我创建了 HibernateMapping 并在我的 DTO classes,
在 SymbolsHistorical 中,
@OneToOne
@JoinColumn(foreignKey = @ForeignKey(name = "symbols_fk"))
private Symbols symbol;
我在 Symbols class,
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;
每当我需要阅读符号时,我也需要它的symbolsHistorical,
我正在使用 findBySymbol 方法获取符号数据。每当我进行上述映射时,我都会得到,
'field list'
中的未知列 '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
class:
@OneToOne
@JoinColumn(name="symbols")
private Symbols symbol;
当您使用 JSON 序列化时,由于双向映射,您将得到 WhosebugError。
所以你必须在 Symbol
或 SymbolsHistorical
class 中添加注释(取决于你要序列化的内容)以打破循环。
例如
@JsonBackReference // this property will not be serialized
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;
我有一个 table 叫做符号和符号历史,
Symbols
symbols(Pk)
SymbolsHistorical
id
symbols
Forign key name - symbols_fk (FK)
我创建了 HibernateMapping 并在我的 DTO classes,
在 SymbolsHistorical 中,
@OneToOne
@JoinColumn(foreignKey = @ForeignKey(name = "symbols_fk"))
private Symbols symbol;
我在 Symbols class,
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;
每当我需要阅读符号时,我也需要它的symbolsHistorical,
我正在使用 findBySymbol 方法获取符号数据。每当我进行上述映射时,我都会得到, 'field list'
中的未知列 '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
class:
@OneToOne
@JoinColumn(name="symbols")
private Symbols symbol;
当您使用 JSON 序列化时,由于双向映射,您将得到 WhosebugError。
所以你必须在 Symbol
或 SymbolsHistorical
class 中添加注释(取决于你要序列化的内容)以打破循环。
例如
@JsonBackReference // this property will not be serialized
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;