Java 已分离实体传递到持久化创建三个实体时出现错误
我有3个实体Java 已分离实体传递到持久化创建三个实体时出现错误,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有3个实体客户详细信息,地址行和银行详细信息。当我试图使用crudepository在h2db中创建条目时,它抛出一个错误,将其中一个声明为分离实体。 有人能告诉我为什么会抛出这个错误吗 Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.ABC.AAP.Domain.Address at org.hibernate.event.internal.D
客户详细信息
,地址行
和银行详细信息
。当我试图使用crudepository
在h2db中创建条目时,它抛出一个错误,将其中一个声明为分离实体。
有人能告诉我为什么会抛出这个错误吗
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.ABC.AAP.Domain.Address
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:120) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:113) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:745) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:713) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.engine.spi.CascadingActions$7.cascade(CascadingActions.java:298) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:492) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:416) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:218) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:151) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:427) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:264) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:721) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:707) ~[hibernate-core-5.4.20.Final.jar:5.4.20.Final]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314) ~[spring-orm-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at com.sun.proxy.$Proxy77.persist(Unknown Source) ~[na:na]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:554) ~[spring-data-jpa-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.data.repository.core.support.ImplementationInvocationMetadata.invoke(ImplementationInvocationMetadata.java:72) ~[spring-data-commons-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:382) ~[spring-data-commons-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:205) ~[spring-data-commons-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:549) ~[spring-data-commons-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:155) ~[spring-data-commons-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:130) ~[spring-data-commons-2.3.3.RELEASE.jar:2.3.3.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) ~[spring-tx-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.8.RELEASE.jar:5.2.8.RELEASE]
... 21 common frames omitted
此错误在创建实体时抛出。
org.hibernate.persistentObject异常:传递给persist的分离实体:
import javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.OneToOne;
@实体
公营银行资料{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串银行名称;
私人字符串帐号;
专用字符串ifsc_代码;
私有字符串参与方\帐户\类型;
@OneTONE(mappedBy=“银行详细信息”)私人客户详细信息
客户信息;
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
结果=素数*结果+(int)(id^(id>>>32));
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
银行详情其他=(银行详情)obj;
if(id!=其他.id)
返回false;
返回true;
}
公共银行详细信息(字符串银行名称、字符串账号、字符串ifsc代码、字符串参与方账户类型){
超级();
this.bank\u name=银行名称;
this.account\u number=账号;
此.ifsc\u代码=ifsc\u代码;
this.party\u account\u type=party\u account\u type;
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getBank_name(){
返回银行名称;
}
公共作废银行名称(字符串银行名称){
this.bank\u name=银行名称;
}
公共字符串getAccount_number(){
返回帐号;
}
公共作废设置帐号(字符串帐号){
this.account\u number=账号;
}
公共字符串getIfsc_代码(){
返回ifsc_代码;
}
公共无效设置ifsc_代码(字符串ifsc_代码){
此.ifsc\u代码=ifsc\u代码;
}
公共字符串getParty\u account\u type(){
退货方\账户\类型;
}
公共无效设置参与方账户类型(字符串参与方账户类型){
this.party\u account\u type=party\u account\u type;
}
}
import java.util.Date;
导入javax.persistence.CascadeType;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.OneToOne;
@实体
公共类客户详细信息{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串参与方代码;
私有字符串标题;
私有字符串名;
私有字符串姓氏;
私密性;
私人国籍;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“address\u id”,referencedColumnName=“id”)专用地址
地址线;
专用字符串移动电话号码;
私人字符串电子邮件地址;
私人串党职业;
私有字符串pan_编号;
私有字符串tan_编号;
个人出生日期;
私有字符串业务类型;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“bank\u details\u id”,referencedColumnName=“id”)
私人银行详情银行详情;
公共客户详细信息(字符串参与方代码、字符串标题、字符串名、字符串姓、字符串性别、,
字符串国籍、地址行、字符串手机号、字符串电子邮件id、字符串参与方职业、,
字符串PANU编号、字符串TANU编号、出生日期、字符串业务类型、银行详情银行详情){
超级();
this.party\u code=party\u code;
this.title=标题;
this.first\u name=first\u name;
this.last_name=last_name;
这个。性=性;
国籍=国籍;
this.addressline=地址行;
this.mobile\u number=mobile\u number;
this.email\u id=电子邮件\u id;
这个。党的职业=党的职业;
this.pan_number=pan_number;
this.tan_number=tan_number;
this.date_of_birth=日期_of_birth;
this.business_utype=业务类型;
this.bank\u details=bank\u details;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
结果=素数*结果+(int)(id^(id>>>32));
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
CustomerDetails other=(CustomerDetails)obj;
if(id!=其他.id)
返回false;
返回true;
}
公共字符串getParty_代码(){
退货方代码;
}
公共无效设置参与方代码(字符串参与方代码){