我正在使用Spring Boot 2和JPA / Hibernate。
我有2个实体:
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 + '\'' +
'}';
}
}
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 (?, ?, ?, ?)
请提供帮助,因为我没有将任何null值传递给该对象。在控制台日志记录中,我可以在ItemPackingDetails对象中正确看到所有值。