Java org.hibernate.type.SerializationException:尝试将数据保存到postgresl表时引发无法序列化
我在尝试将itemLocations字段保存到表中时遇到spring jpa异常。 包com.tgt.scmd.inbound.domainJava org.hibernate.type.SerializationException:尝试将数据保存到postgresl表时引发无法序列化,java,spring,hibernate,jpa,serialization,Java,Spring,Hibernate,Jpa,Serialization,我在尝试将itemLocations字段保存到表中时遇到spring jpa异常。 包com.tgt.scmd.inbound.domain import java.io.Serializable; import java.sql.Timestamp; import java.util.Arrays; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Genera
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Arrays;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import com.tgt.scmd.inbound.utils.RequestStatus;
@Entity
@Table(name = "breakpack_authorization_details")
public class SupplyChainBreakPackAuth implements Serializable{
/**
*
*/
private static final long serialVersionUID = -5688043643278441710L;
@Id
@SequenceGenerator(name = "break_pack_auth_seq", sequenceName = "break_pack_auth_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "break_pack_auth_seq")
private int id;
private ItemLocations[] itemLocations;
@Column(updatable = false)
@CreationTimestamp
private Timestamp requestedDate;
private String requestReason;
private String requestor;
private String department;
private String itemStatus;
private String reasonForFailure;
private String approversReason;
private String approver;
private String assortmentAnalysisDeptId;
private String assortmentAnalysisDescription;
private RequestStatus requestStatus;
@UpdateTimestamp
private Timestamp modifiedDate;
public Integer getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public ItemLocations[] getItemLocations() {
return itemLocations;
}
public void setItemLocations(ItemLocations[] itemLocations) {
this.itemLocations = itemLocations;
}
public String getApprover() {
return approver;
}
public void setApprover(String approver) {
this.approver = approver;
}
public RequestStatus getRequestStatus() {
return requestStatus;
}
public void setRequestStatus(RequestStatus requestStatus) {
this.requestStatus = requestStatus;
}
public Timestamp getRequestedDate() {
return requestedDate;
}
public void setRequestedDate(Timestamp requestedDate) {
this.requestedDate = requestedDate;
}
public String getRequestReason() {
return requestReason;
}
public void setRequestReason(String requestReason) {
this.requestReason = requestReason;
}
public String getRequestor() {
return requestor;
}
public void setRequestor(String requestor) {
this.requestor = requestor;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getItemStatus() {
return itemStatus;
}
public void setItemStatus(String itemStatus) {
this.itemStatus = itemStatus;
}
public String getReasonForFailure() {
return reasonForFailure;
}
public void setReasonForFailure(String reasonForFailure) {
this.reasonForFailure = reasonForFailure;
}
public String getApproversReason() {
return approversReason;
}
public void setApproversReason(String approversReason) {
this.approversReason = approversReason;
}
public String getAssortmentAnalysisDeptId() {
return assortmentAnalysisDeptId;
}
public void setAssortmentAnalysisDeptId(String assortmentAnalysisDeptId) {
this.assortmentAnalysisDeptId = assortmentAnalysisDeptId;
}
public String getAssortmentAnalysisDescription() {
return assortmentAnalysisDescription;
}
public void setAssortmentAnalysisDescription(
String assortmentAnalysisDescription) {
this.assortmentAnalysisDescription = assortmentAnalysisDescription;
}
public Timestamp getModifiedDate() {
return modifiedDate;
}
public void setModifiedDate(Timestamp modifiedDate) {
this.modifiedDate = modifiedDate;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((approver == null) ? 0 : approver.hashCode());
result = prime * result
+ ((approversReason == null) ? 0 : approversReason.hashCode());
result = prime
* result
+ ((assortmentAnalysisDeptId == null) ? 0
: assortmentAnalysisDeptId.hashCode());
result = prime
* result
+ ((assortmentAnalysisDescription == null) ? 0
: assortmentAnalysisDescription.hashCode());
result = prime * result
+ ((department == null) ? 0 : department.hashCode());
result = prime * result + id;
result = prime * result
+ ((itemLocations == null) ? 0 : itemLocations.hashCode());
result = prime * result
+ ((itemStatus == null) ? 0 : itemStatus.hashCode());
result = prime * result
+ ((modifiedDate == null) ? 0 : modifiedDate.hashCode());
result = prime
* result
+ ((reasonForFailure == null) ? 0 : reasonForFailure.hashCode());
result = prime * result
+ ((requestReason == null) ? 0 : requestReason.hashCode());
result = prime * result
+ ((requestStatus == null) ? 0 : requestStatus.hashCode());
result = prime * result
+ ((requestedDate == null) ? 0 : requestedDate.hashCode());
result = prime * result
+ ((requestor == null) ? 0 : requestor.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SupplyChainBreakPackAuth other = (SupplyChainBreakPackAuth) obj;
if (approver == null) {
if (other.approver != null)
return false;
} else if (!approver.equals(other.approver))
return false;
if (approversReason == null) {
if (other.approversReason != null)
return false;
} else if (!approversReason.equals(other.approversReason))
return false;
if (assortmentAnalysisDeptId == null) {
if (other.assortmentAnalysisDeptId != null)
return false;
} else if (!assortmentAnalysisDeptId
.equals(other.assortmentAnalysisDeptId))
return false;
if (assortmentAnalysisDescription == null) {
if (other.assortmentAnalysisDescription != null)
return false;
} else if (!assortmentAnalysisDescription
.equals(other.assortmentAnalysisDescription))
return false;
if (department == null) {
if (other.department != null)
return false;
} else if (!department.equals(other.department))
return false;
if (id != other.id)
return false;
if (itemLocations == null) {
if (other.itemLocations != null)
return false;
} else if (!itemLocations.equals(other.itemLocations))
return false;
if (itemStatus == null) {
if (other.itemStatus != null)
return false;
} else if (!itemStatus.equals(other.itemStatus))
return false;
if (modifiedDate == null) {
if (other.modifiedDate != null)
return false;
} else if (!modifiedDate.equals(other.modifiedDate))
return false;
if (reasonForFailure == null) {
if (other.reasonForFailure != null)
return false;
} else if (!reasonForFailure.equals(other.reasonForFailure))
return false;
if (requestReason == null) {
if (other.requestReason != null)
return false;
} else if (!requestReason.equals(other.requestReason))
return false;
if (requestStatus != other.requestStatus)
return false;
if (requestedDate == null) {
if (other.requestedDate != null)
return false;
} else if (!requestedDate.equals(other.requestedDate))
return false;
if (requestor == null) {
if (other.requestor != null)
return false;
} else if (!requestor.equals(other.requestor))
return false;
return true;
}
public static class ItemLocations{
private String tcin;
private Integer[] locationIds;
public String getTcin() {
return tcin;
}
public void setTcin(String tcin) {
this.tcin = tcin;
}
public Integer[] getLocationIds() {
return locationIds;
}
public void setLocationIds(Integer[] locationIds) {
this.locationIds = locationIds;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(locationIds);
result = prime * result + ((tcin == null) ? 0 : tcin.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ItemLocations other = (ItemLocations) obj;
if (!Arrays.equals(locationIds, other.locationIds))
return false;
if (tcin == null) {
if (other.tcin != null)
return false;
} else if (!tcin.equals(other.tcin))
return false;
return true;
}
}
}
当我尝试在同一个服务器上执行hibernate保存操作时,它会引发not serializable异常。具体的例外情况如下:
原因:org.hibernate.type.SerializationException:无法序列化
在org.hibernate.internal.util.SerializationHelper.serialize(SerializationHelper.java:119)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.internal.util.SerializationHelper.serialize(SerializationHelper.java:144)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.internal.util.SerializationHelper.clone(SerializationHelper.java:75)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.type.descriptor.java.SerializableTypeScriptor$SerializableMutabilityPlan.deepCopyNotNull(SerializableTypeScriptor.java:43)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.type.descriptor.java.SerializableTypeScriptor$SerializableMutabilityPlan.deepCopyNotNull(SerializableTypeScriptor.java:30)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.type.descriptor.java.MutableMutabilityPlan.deepCopy(MutableMutabilityPlan.java:35)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.type.AbstractStandardBasicType.deepCopy(AbstractStandardBasicType.java:283)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.type.AbstractStandardBasicType.deepCopy(AbstractStandardBasicType.java:279)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.type.TypeHelper.deepCopy(TypeHelper.java:51)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:264)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:178)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.event.internal.AbstractSaveEventListener.SaveWithGenerateId(AbstractSaveEventListener.java:121)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67)~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753)~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
在org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146)~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0_121]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0121]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0121]
在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_121]
在org.springframework.orm.jpa.ExtendedEntityManagerCreator$extendedentitymanageringhandler.invoke(ExtendedEntityManagerCreator.java:347)~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
在com.sun.proxy.$Proxy101.persist(未知源)~[na:na]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0_121]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0121]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0121]
在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_121]
在org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298)~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
在com.sun.proxy.$Proxy101.persist(未知源)~[na:na]
在org.springframework.data.jpa.repository.support.simplejperparepository.save(SimpleJpaRepository.java:508)~[spring-data-jpa-1.11.1.RELEASE.jar:na]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0_121]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0121]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0121]
在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_121]
在org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:504)~[spring-data-commons-1.13.1.RELEASE.jar:na]
在org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:489)~[spring-data-commons-1.13.1.RELEASE.jar:na]
在org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:461)~[spring-data-commons-1.13.1.RELEASE.jar:na]
在org.springfram