Не удалось определить рекомендуемый JdbcType для типа Java «java.util.Map<java.lang.String, java.util.List<java.lang.String>>»

У меня возникает эта ошибка:

Caused by: org.hibernate.type.descriptor.java.spi.JdbcTypeRecommendationException: Could not determine recommended JdbcType for Java type 'java.util.Map<java.lang.String, java.util.List<java.lang.String>>'

Кажется, это ошибка в том, как сопоставить приведенную ниже MAP с Hibernate. private Map<String, List<ProductDetails>> productCatalogue;

Это карта КАТЕГОРИИ (ключ), сопоставленная списку ПРОДУКТОВ (значение).

См. использование карты в компании ниже:

@Entity 
@Table(name = "company")
public class Company {
    
    @Id
  @GeneratedValue(strategy=GenerationType.AUTO) 
  private Long company_id; 

  private String companyName;

  private Map<String, List<ProductDetails>> productCatalogue;


public void addProductToCatalogue(ProductDetails product) {
        // Get the product category
        String category = product.getCategory();

        // Check if the category is already in the map
        if (!productCatalogue.containsKey(category)) {
            productCatalogue.put(category, new ArrayList<>());
        }

        // Add the product to the corresponding category in the map
        productCatalogue.get(category).add(product);
    }    

Ниже показано, как выглядит моя сущность ProductDetails:

@Entity 
@Table(name = "product")
public class ProductDetails {
  
   @Id
  @GeneratedValue(strategy=GenerationType.AUTO) 
    
  private Long product_id;  
  private String category;
  private String name;
  
  // Many-to-One relationship with Company
    @ManyToOne
    @JoinColumn(name = "company_id")
    private Company company;
 

Я попробовал использовать аннотацию для @ElementCollection. Но не решено:

@ElementCollection
   @CollectionTable(name = "product_catalogue", joinColumns = @JoinColumn(name = "company_id"))
   @MapKeyColumn(name = "category")
   @Column(name = "product_id")
  private Map<String, List<ProductDetails>> productCatalogue;
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, ты можешь сделать что-то вроде этого. Отметьте это поле как временное, а затем заполните его после загрузки объекта.

@Entity
@Table(name = "company")
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long company_id;

    private String companyName;

    @OneToMany
    private List<ProductDetails> productDetails;

    @Transient
    private Map<String, List<ProductDetails>> productCatalogue;

    public Map<String, List<ProductDetails>> getProductCatalogue() {
        return productCatalogue;
    }

    @PostLoad
    public void addProductToCatalogue(List<ProductDetails> productDetailList) {

        for (ProductDetails product : productDetailList) {
            // Get the product category
            String category = product.getCategory();

            // Check if the category is already in the map
            if (!productCatalogue.containsKey(category)) {
                productCatalogue.put(category, new ArrayList<>());
            }
            // Add the product to the corresponding category in the map
            productCatalogue.get(category).add(product);
        }
    }
}

Другие вопросы по теме