У меня есть две сущности, давайте назовем их категориями и продуктами.Эти две сущности сопоставлены отношениями «многие ко многим».
Моя проблема в том, что я пытаюсь получить информацию о категориях продуктов.Попытка этого приводит к пустым категориям.
Это мой код:
PersistenceEntity
@MappedSuperclass
public class PersistenceEntity implements Serializable {
private static final long serialVersionUID = 4056818895685613967L;
// Instance Variables
@Id
@Column(unique = true)
@GeneratedValue(strategy = GenerationType.TABLE)
protected Long id;
@JsonIgnore
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
protected Date creationDate = new Date();
...Getters and Setters omitted for brevity
}
Категория
@Entity
@Table(name = "category")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Category extends PersistenceEntity{
private static final long serialVersionUID = 1L;
@Column(nullable = false)
private String categoryName;
@Column(nullable = false)
private Boolean active;
@Column(nullable = true)
private String picture;
@JsonIgnore
private MetaData metadata;
@ManyToMany(fetch = FetchType.EAGER,mappedBy = "categories")
private Set<Product> products;
...Getters and Setters omitted for brevity
}
Product
@Entity
@Table(name = "products",uniqueConstraints = { @UniqueConstraint(columnNames = "productCode")})
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product extends PersistenceEntity {
private static final long serialVersionUID = 8727166810127029053L;
@Column(name = "product_name")
private String name;
private String productImageUrl;
@JsonIgnore
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name="category_products",
joinColumns={@JoinColumn(name="product_id", unique = false)},
inverseJoinColumns={@JoinColumn(name="category_id", unique = false)})
private Set<Category> categories;
...Getters and Setters omitted for brevity
}
ProductServiceImplementation
@Service
public class ProductService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private ProductRepository productRepository;
public List<Product> getProductsByShopId( Long id) {
List<Product> productList = new ArrayList<>();
productList = productRepository.findByShopId(id);
return productList;
}
public Set<Long> getCategoryIds(List<Product> products){
Set<Long> categoriesIDs = new HashSet<Long>();
for (Product product : products) {
product.getCategories().forEach(category -> {
categoriesIDs.add(category.getId());
});
}
return categoriesIDs;
}
}
Проблема заключается в получении привязанных идентификаторов категорийк списку продуктов.
Как я могу получить CategoryIds из продукта.Моя функция getCategoryIds возвращает пустое значение всегда
public Set<Long> getCategoryIds(List<Product> products){
Set<Long> categoriesIDs = new HashSet<Long>();
for (Product product : products) {
product.getCategories().forEach(category -> {
categoriesIDs.add(category.getId());
});
}
return categoriesIDs;
}