簡體   English   中英

為什么我的轉換列被 JpaAttributeTypeInspection 標記並帶有錯誤消息“'Basic' 屬性類型不應該是地圖”?

[英]Why is my converted column marked by JpaAttributeTypeInspection with the error message “'Basic' attribute type should not be a map”?

我試圖通過 JPA 和 Spring 將一些 JSON 作為字符串存儲在列中,並且正在遵循baeldung 教程 我的代碼是這樣的:

    @Column
    @Convert(converter = MyEntityExtentionConverter.class)
    private Map<String, Object> myEntityExtention;

MyEntityExtentionConverterjavax.persistence.AttributeConverter<Map<String, Object>, String>的實現,它使用 Jackson ObjectMapper來回轉換字符串。

根據提到的教程這應該是它,但是現在我得到一個錯誤

“基本”屬性類型不應為 map

從理論上講,我可以通過在注釋中添加@SuppressWarnings("JpaAttributeTypeInspection")來禁用它,但這感覺就像忽略而不是解決錯誤。 我在這里做錯了什么?

您必須使用 @Type 注釋道具“myEntityExtention”,不能同時添加 @Type 和 @Convert..

正如您在本教程中看到的,您必須在實體頂部定義 json 類型

@Entity
@Table(name = "some_table_name")
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class CustomEntity {

然后添加@Type注釋而不是@Convert

@Type( type = "json" )
private Map<String, Object> myEntityExtention;

確保添加所有正確的依賴項/版本。

IE 我正在使用 hibernate 5.4 所以我的依賴項是:

<!-- Hibernate ORM core version 5.4.21.Final (inherited from spring-boot 2.3.4)-->
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>        
 </parent>
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-hibernate5</artifactId>
        <version>2.8.4</version>
    </dependency>
    <dependency>
            <groupId>com.vladmihalcea</groupId>
            <artifactId>hibernate-types-52</artifactId>
            <!--for hibernate >= 5.2-->
            <version>2.10.2</version>
    </dependency>
</dependencies>

看起來這是來自 IntelliJ IDEA 的問題:

https://youtrack.jetbrains.com/issue/IDEA-270687

我們可以通過這種方式使用解決方法:使用@SuppressWarnings("JpaAttributeTypeInspection")注釋刪除警告。

該字段不應該被持久化。 刪除@Column 注釋並使用@Transient。 您應該將其保留為 JSON,這將在 customerAttributeJSON 中完成,當從數據庫中讀取 customerAttributes 時,您可以將其與 DTO 一起使用。

 @Entity @Table(name = "Customers") public class Customer { @Id private int id; private String firstName; private String lastName; private String customerAttributeJSON; @Transient @Convert(converter = HashMapConverter.class) private Map<String, Object> customerAttributes; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM