[SPRING] 같은 식별자 값을 가진 다른 객체가 이미 세션 오류와 관련이 있습니다. [duplicate]
SPRING같은 식별자 값을 가진 다른 객체가 이미 세션 오류와 관련이 있습니다. [duplicate]
나는 최대 절전 모드 주석에 문제가있다. 두 클래스 사이에 양방향 관계가 있습니다. 다음은 매핑입니다 (axtavt 덕분에).
@Entity
public class Receipt implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "receipt")
private List<Collection> collections;
...
}
@Entity
public class Collection implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="ReceiptId")
private Receipt receipt;
...
}
하지만 다음을 사용하여 영수증을 수금액 목록에 저장하려고합니다.
Receipt r = new Receipt();
List<Collection> cols = new ArrayList<Collection>();
cols.add(new Collection());
r.setCollections(cols);
getHibernateTemplate().save(r);
이 오류를 생성합니다.
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.coa.acctreports.pojo.Collection#0]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.coa.acctreports.pojo.Collection#0]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683)
at com.coa.acctreports.daoImp.AccountingReportsImpl.save(AccountingReportsImpl.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
그러나 내가 그것을 바꿀 때
session.merge(receipt)
그것은 오류가 있지만 내 데이터베이스를 확인할 때 colliations 테이블에 receiptId fk null로 설정되어 있습니다 ... 어떤 도움을 주셔서 감사합니다. 감사합니다 ^ _ ^ ...
해결법
-
==============================
1.Receipt의 mappedby annotation은 Collection이 실제로 관계의 소유 측이라는 것을 의미합니다. 이는 영수증을 계단식으로 처리 했으므로 의도 한 것이 아니기 때문입니다.
Receipt의 mappedby annotation은 Collection이 실제로 관계의 소유 측이라는 것을 의미합니다. 이는 영수증을 계단식으로 처리 했으므로 의도 한 것이 아니기 때문입니다.
영수증에서 mappedby를 제거하고 최대 절전 모드 문서에서 다음 예제를 따라야합니다.
@Entity public class Receipt implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name="ReceiptId") private List<Collection> collections; ... } @Entity public class Collection implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @ManyToOne @JoinColumn(name="ReceiptId",insertable=false,updatable=false) private Receipt receipt; ... }
위에서 수행 한 것과 동일한 코드를 사용하면 저장 작업을 수행 할 수 있습니다.
이것에 대한 더 많은 정보가 있습니다 : http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/
from https://stackoverflow.com/questions/4194350/a-different-object-with-the-same-identifier-value-was-already-associated-with-th by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] postgresql 쿼리에 대한 큰 ResultSet (0) | 2019.04.24 |
---|---|
[SPRING] JSP 페이지에서 hasPermission을 사용할 수 있도록 스프링 보안을 설정하는 방법은 무엇입니까? (0) | 2019.04.24 |
[SPRING] 스프링 보안 3.1 : 세션 동시성 제어가 작동하지 않는 이유는 무엇입니까? (0) | 2019.04.24 |
[SPRING] Spring 데이터 Neo4J 저장소 findAll ()은 nullpointerexception을 발생시킵니다. (0) | 2019.04.23 |
[SPRING] Flex3 / Tomcat / BlazeDS / Spring에서 NetConnection.Call.Failed가 산발적으로 발생했습니다. (0) | 2019.04.23 |