나는 아래와 같이 두개의 테이블을 가지고있다.Hibernate OneToMany리스트 매핑 문제
TableOne
id pk
code varchar (references a column in TableTwo, non unique)
TableTwo
id pk
code varchar (referenced in TableOne, non unique)
option
표 1에서 하나의 id는 하나의 코드 만 가질 수 있습니다. 표 2에서 코드는 다른 옵션에 대해 반복 될 수 있습니다. 즉 code + option은 유일 할 것입니다 (DB에서 제약 조건을 정의한 것은 아닙니다).
@Entity
@Table(name = "TableOne")
public class Table1 {
@Id
@Column(name = "id")
private String id;
@OneToMany(mappedBy = "table1", fetch = FetchType.EAGER)
private List<Table2> table2s;
}
@Entity
@Table(name = "TableTwo")
public class Table2 {
@Id
@Column(name = "id")
private String id;
@ManyToOne
@JoinColumn(name = "code", referencedColumnName = "code", nullable = false, insertable = false, updatable = false)
private Table1 table1;
}
내 응용 프로그램을 실행하려고
아래에 설명 된대로지금, 나는 그것이 오류 다음 부여합니다 내 엔티티 클래스를
org.springframework.orm.jpa.JpaSystemException: Found shared references to a collection: model.Table1.table2s; nested exception is org.hibernate.HibernateException: Found shared references to a collection: model.Table1.table2s
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:333) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) [spring-tx-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) [spring-tx-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:504) [spring-tx-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292) [spring-tx-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) [spring-tx-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) [spring-aop-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) [spring-aop-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at au.th.api.assessment.service.MasterQuestionsServiceImpl$$EnhancerBySpringCGLIB$$e50ce6a4.getQuestionById(<generated>) [classes/:na]
같은 코드가 TableOne에서 두 개의 행이 있습니다 . TableTwo에는 해당 코드가있는 행이 하나뿐입니다.
여기 좀 도와주세요.
편집 : 나는 referencedColumnName로을 제거하면
, 그것은 잘 작동하지만 목록이 비어 있습니다.
디버깅시 트랜잭션이 커밋되기 전에 목록 개체가 PersistentBag로 페치됩니다. 커밋시 예외 사항을 발생시킵니다. 예외 전에 인쇄 된 오류
o.h.i.ExceptionMapperStandardImpl : HHH000346: Error during managed flush [org.hibernate.HibernateException: Found shared references to a collection: model.Table1.table2s]
당신의 테이블의 이름은 무엇입니까에서 작업 예를 찾을 수 있습니까? 'Table2' 또는'TableTwo'? –
@KenrySanchez, 너는 빠르다. ;-). 나는 그것을 정정하기 위해 나의 질문을 편집했다. – Maz
'@OneToMany (mappedBy = "table1", fetch = FetchType.EAGER)'를'@OneToMany (mappedBy = "TableTwo", fetch = FetchType.EAGER)로 바꾼다면 –