У меня есть 3 таблицы, например следующие
Продукт { Я бы, заглавие }
Product_image { Код товара, image_type_id, дорожка, alt_text }
Product_image_type { id, type_name }
Я хочу, чтобы объект результата выглядел следующим образом:
Product{
id,
title,
image_types[
{
type_id,
type_name,
image [
{
alt_text,
path
},
{
alt_text,
path
}
]
},
{
type_id,
type_name,
image [
{
alt_text,
path
}
]
}
]
}
Я сделал следующее
Класс продукта:
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinTable(
name = "product_image",
joinColumns = { @JoinColumn(name = "productId", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "typeId", referencedColumnName = "id") }
)
private Set<ProductImageType> imageTypes = new HashSet();
Класс Product_type_image:
@ManyToMany(mappedBy="imageTypes")
private Set<Product> products;
@OneToMany(fetch=FetchType.LAZY, mappedBy = "productImageType")
private Set<ProductImage> productImages = new HashSet();
Класс product_image:
@OneToOne(fetch=FetchType.LAZY, mappedBy="productImage")
@JoinColumn(name="typeId", referencedColumnName = "id", insertable=false, updatable=false)
private ProductImageType oneProductImageType;
У меня появился такой формат, какой я хочу, однако у меня есть все изображения продуктов для одного типа, я хочу получить только изображения для изображения продукта только для текущего продукта. Например, я попросил product_id = 1, у меня есть тип 2, я хочу, чтобы изображения внутри этих двух типов были только для product_id = 1.
Хороший пример:
Prodcut{
id: 1,
title: "product title 1",
image_types:[
{
type_id: 1
type_name: "type example 1"
image [
{
product_id: 1,
alt_text: "something",
path: "http:something",
},
{
product_id: 1,
alt_text: "something2",
path: "http:something2",
}
]
},
{
type_id: 2
type_name: "type example 2"
image [
{
product_id: 1,
alt_text: "type 2 something",
path: "http:something",
},
{
product_id: 1,
alt_text: "type 2something2",
path: "http:something2",
}
]
}
]
}
Что я получаю сейчас:
Prodcut{
id: 1,
title: "product title 1",
image_types:[
{
type_id: 1
type_name: "type example 1"
image [
{
product_id: 1,
alt_text: "something",
path: "http:something",
},
{
product_id: 1,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 2,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 3,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 4,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 4,
alt_text: "something2",
path: "http:something2",
}
]
},
{
type_id: 2
type_name: "type example 2"
image [
{
product_id: 1,
alt_text: "type 2 something",
path: "http:something",
},
{
product_id: 1,
alt_text: "type 2something2",
path: "http:something2",
},
{
product_id: 1,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 2,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 3,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 4,
alt_text: "something2",
path: "http:something2",
},
{
product_id: 4,
alt_text: "something2",
path: "http:something2",
}
]
}
]
}
Содержимое в таблицах:
Product Table:
id title
1 product title 1
2 product title 2
3 product title 3
4 product title 4
5 product title 5
Product_image Table:
product_id image_type_id path alt_text
1 1 http:something something
1 1 http:something2 something2
1 2 http:something type 2 something
1 2 http:something2 type 2 something2
2 1 http:something2 something2
3 1 http:something2 something2
4 1 http:something2 something2
4 1 http:something2 something2
2 2 http:something2 something2
3 2 http:something2 something2
4 2 http:something2 something2
4 2 http:something2 something2
Product_image_type Table:
id type_name
1 type example 1
2 type example 2
Спасибо заранее!