В общем рабочих решения по итогу 2. Если кто-нибудь сможет предложить что-нибудь более "достойное" буду очень признателен!
Наш JSON от клиента:
{"subCategories":[{"name":"Детские игрушки"},{"name":"Детское питание"},{"name":"Мамина-рация"}]}
+ Мы еще принимаем ID Высшей категории с помощью :
@PathVariable(value = "highCategoryId")
Десериализуем c помощью класса-
Wrapper-a :
public class SubCategoryWrapper {
private List<SubCategory> subCategories;
/**
* @return the subCategories
*/
public List<SubCategory> getSubCategories() {
return subCategories;
}
/**
* @param subCategories the persons to set
*/
public void setSubCategories(List<SubCategory> subCategories) {
this.subCategories = subCategories;
}
}
Вот собственно сам
SubCategory.java:
@Entity
@Table(name = "sub_category")
public class SubCategory extends BaseModel {
@Column(name = "NAME")
private String name;
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "HIGH_CATEGORY_ID",referencedColumnName = "ID")
private HighCategory highCategory;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HighCategory getHighCategory() {
return highCategory;
}
public void setHighCategory(HighCategory highCategory) {
this.highCategory = highCategory;
}
@Override
public String toString() {
return "Имя Подкатегории: "+getName();
}
}
В DAO слое (Туда приход
highCategoryId и
SubCategoryWrapper ) у нас есть 2 пути :
1: HighCategory highCategory=entityManager.find(HighCategory.class,highCategoryId);
highCategory.setSubCategories(subCategories.getSubCategories());
В этом способе в SubCategoryWrapper, в каждом объекте коллекции
List не проинициализирована переменная highCategory. Поэтому тут требуется сделать дополнительные манипуляции с сетером в
HighCategory:
public void setSubCategories(List<SubCategory> subCategories) {
this.subCategories = subCategories;
for(SubCategory subCategory: subCategories){
subCategory.setHighCategory(this);
}
Может кто знает, как проинициализировать ее без таких плясок?
2-ой способ:for (SubCategory subCategory : subCategories.getSubCategories()) {
entityManager.createNativeQuery("INSERT INTO sub_category(NAME,HIGH_CATEGORY_ID) VALUES(?,?)")
.setParameter(1,subCategory.getName())
.setParameter(2,highCategoryId).executeUpdate();
}