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。

所以你必须在 SymbolSymbolsHistorical class 中添加注释(取决于你要序列化的内容)以打破循环。

例如

@JsonBackReference // this property will not be serialized
@OneToOne(mappedBy = "symbol")
private SymbolsHistorical symbolsHistorical;