Я использую Spring Boot 2 и JPA / Hibernate.
У меня есть 2 права:
- ItemDetails
package com.app.shop.entity;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Cascade;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@Getter
@Setter
@Entity
@Table(name = "item_mst")
@Cacheable
public class ItemDetails {
@Id
@Column(name = "item_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "native")
private int itemId;
@Column(name = "item_name", nullable = false)
private String itemName;
private char status;
private String description;
@OneToMany(mappedBy = "itemDetails")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.PERSIST})
private List<ItemPackingDetails> itemPackingDetails;
@Column(name = "customer_allowed")
private String customerAllowed;
@ManyToMany(mappedBy = "itemDetails")
private Set<Category> categories;
String image;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ItemDetails that = (ItemDetails) o;
return itemId == that.itemId &&
status == that.status &&
Objects.equals(itemName, that.itemName);
}
@Override
public String toString() {
return "ItemDetails{" +
"itemId=" + itemId +
", itemName='" + itemName + '\'' +
", status=" + status +
", description='" + description + '\'' +
", itemPackingDetails=" + itemPackingDetails +
", customerAllowed='" + customerAllowed + '\'' +
", categories=" + categories +
", image='" + image + '\'' +
'}';
}
}
ItemPackingDetails
package com.app.shop.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
@Getter
@Setter
@Entity
@Table(name = "packing_details")
public class ItemPackingDetails {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "native")
private int id;
private int size;
private char status;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "item_id")
private ItemDetails itemDetails;
}
Я написал функцию для добавления нового объекта ItemPackingDetails к уже существующему объекту ItemDetails в БД. Я использую PostgreSQL.
public HashMap<String, Object> addPacking(ItemDetails itemDetails){
returnObject = new HashMap<>();
Optional<ItemDetails> optional = productManagementRepository.findById(itemDetails.getItemId());
ItemDetails foundItemDetails = null;
if (optional.isPresent()){
foundItemDetails = optional.get();
}
if (foundItemDetails!=null){
for (ItemPackingDetails itemPackingDetails : itemDetails.getItemPackingDetails()) {
itemPackingDetails.setStatus('y');
itemPackingDetails.setItemDetails(foundItemDetails);
foundItemDetails.getItemPackingDetails().add(itemPackingDetails);
logger.error("Packing Details: " + itemPackingDetails.getSize() + " " + itemPackingDetails.getStatus() + " " + itemPackingDetails.getItemDetails().getItemId());
}
productManagementRepository.save(foundItemDetails);
returnObject.put("message", "success");
}
else
returnObject.put("message", "failure" + itemDetails.getItemId());
return returnObject;
}
Я получаю следующую ошибку: org. postgresql .util.PSQLException: ОШИБКА: недопустимая последовательность байтов для кодировки "UTF8": 0x00 при выполнении запроса insert into packing_details (item_id, size, status, id) values (?, ?, ?, ?)
Пожалуйста, помогите, поскольку я не передаю нулевые значения объекту. В журнале консоли я вижу все значения правильно в объекте ItemPackingDetails.