JPA:无法确定 <SomeCustomClass> 的推荐 JdbcType

Nic*_*ini 1 java spring hibernate jpa spring-boot

我在 Java 17 中使用 Spring Boot 3 编写了此代码@Entity,以将有关引号的信息存储在相应的 MySQL 表中。

package ch.pcngroup.gestionale.entity;

import java.math.BigDecimal;
import java.util.Currency;
import java.util.List;

import ch.pcngroup.gestionale.financial.Item;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.FieldDefaults;

@Entity
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(makeFinal = false, level = AccessLevel.PRIVATE)
@Getter
@NotNull
public class Quote {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    Long id;
    
    @OneToOne
    @JoinColumn(referencedColumnName="id")
    PrivateCustomer customer;
    
    Currency currency;
    @Column(columnDefinition="JSON")
    List<Item> items;
}
Run Code Online (Sandbox Code Playgroud)

现在,该items属性的类型为List<Item>,其中Item是我编写的另一个类。Item不应该是 an @Entity,因为我不想要Items 的单独表格。我想要对 s 做的唯一一件事就是在表/对象的字段Item中以 JSON 格式存储它们的列表。itemsquotes

这是Item.java

package ch.pcngroup.gestionale.financial;

import java.math.BigDecimal;

import lombok.Value;

@Value
public class Item {

    String name;
    String supplierName;
    int quantity;
    BigDecimal price;
    
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行应用程序时,出现以下异常: org.hibernate.type.descriptor.java.spi.JdbcTypeRecommendationException: Could not determine recommended JdbcType for ch.pcngroup.gestionale.financial.Item

我似乎无法在网上找到文档或类似案例。

你们中有人知道我该如何解决这个问题吗?

谢谢。

我尝试了一些注释,@Column(columnDefinition="JSON")但没有帮助。

Jan*_*her 5

当前的解决方案实际上是使用@JdbcTypeCode(SqlTypes.JSON).

例如:

@Entity
public class Quote {
    
    ...

    @JdbcTypeCode(SqlTypes.JSON)
    @Column(columnDefinition="JSON")
    List<Item> items;

    ...
}
Run Code Online (Sandbox Code Playgroud)