У меня возникает эта ошибка:
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;




Я думаю, ты можешь сделать что-то вроде этого. Отметьте это поле как временное, а затем заполните его после загрузки объекта.
@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);
}
}
}