У меня есть модель данных с двунаправленным отображением ManyToMany следующим образом.
Продукт может иметь несколько категорий, аналогично категории могут иметь несколько продуктов.Я использую таблицу ссылок для поддержания отношения.
Сущность «Категории» определяется следующим образом:
@Entity(name = "categories")
class Categories(
@Id
@GeneratedValue
@Column(name="cat_id", unique = true, nullable = false)
var id: Integer,
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "categories_product", joinColumns = [JoinColumn(name = "cat_id")], inverseJoinColumns = [JoinColumn(name = "prd_id")])
@JsonIgnoreProperties("productsSet")
var productsSet: MutableSet<Products>
)
А сущность «Продукты» имеет список в виде обратного отображения в виде:
@Entity(name = "products")
class Products(
@Id
@GeneratedValue
@Column(name="prd_id", unique = true, nullable = false)
var id: Integer,
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "productsSet")
@JsonIgnoreProperties("productsSet")
var categories: MutableSet<Categories>
)
Моя таблица сопоставления 'category_product' имеет два столбца 'cat_id' и 'prd_id', которые ссылаются на таблицы 'category' и 'products' соответственно.
У меня есть ProductsRepository и CategoriesRepository, которыереализует CrudRepository.
Вызов findAll () со стороны mappedBy, которая является ProductsRepository, работает нормально, как показано ниже:
[
{
"id":1,
"name":"Cricket Bat",
"price":10.0,
"categories":[
{
"id":1,
"name":"Sports",
"description":"Sports items"
}
]
},
{
"id":2,
"name":"Spring Boot",
"price":100.0,
"categories":[
{
"id":2,
"name":"Books",
"description":"Book items"
}
]
}
]
Однако, вызов findAll () со стороны-владельца, которой является Categories, возвращает все своипродукты, которые также содержат ссылки на категории, как показано ниже:
[
{
"id":1,
"name":"Sports",
"description":"Sports items",
"productsSet":[
{
"id":1,
"name":"Cricket Bat",
"price":10.0,
"categories":[
{
"id":1,
"name":"Sports",
"description":"Sports items"
}
]
}
]
},
{
"id":2,
"name":"Books",
"description":"Book items",
"productsSet":[
{
"id":2,
"name":"Spring Boot",
"price":100.0,
"categories":[
{
"id":2,
"name":"Books",
"description":"Book items"
}
]
}
]
}
]
Как сделать так, чтобы findAll () со стороны владельца (CategoriesRepository) возвращал только его дочерние элементы, а не дочерние, как на стороне отображения (ProductsRepository)