가능한 중복 :
Spring + Hibernate : a different object with the same identifier value was already associated with the sessionGrails가 개체를 저장하지 못했습니다. 이미 세션에 있습니까?
나는 세 가지 도메인은 아래의 예와 유사하게 배열 한 :
class Computer {
static hasMany = [progStartTimes:ProgStartTime]
static belongsTo = User
static constraints = {
name()
operatingSystem()
processor()
}
User owner
OperatingSystem os
Processor processor
}
class OperatingSystem {
static hasMany = [computers:Computer]
static constraints = {
name(blank:false,unique:'versionType',maxSize:80)
versionType()
}
static mapping = {
versionType type:VersionTypeMapping
}
String name
VersionType versionType
}
class ProgStartTime implements Serializable {
static constraints = {
computer()
program()
duration()
}
static mapping = {
id composite:['computer','program']
duration type:DurationMapping
}
Computer computer
Program program
Duration duration
}
나는 개체의 무리를 만들고 저장하는 컨트롤러가 트랜잭션 내에서 동시에. 이 대여섯 가지 배치에 대해 저장 한 후 잘 작동하지만 잠시 후 나는 예외를 얻을 :
org.springframework.orm.hibernate3.HibernateSystemException: a different object
with the same identifier value was already associated with the session:
[diag.ProgStartTime#diag.ProgStartTime : null]; nested exception is
org.hibernate.NonUniqueObjectException: a different object with the same
identifier value was already associated with the session:
[diag.ProgStartTime#diag.ProgStartTime : null]
여기 개체를 저장하는 컨트롤러 코드의 섹션입니다를. 아무도 무슨 일이 일어나는지 알아?
ownerInstance.withTransaction { status ->
try {
if (operatingSystem.id == null) {
operatingSystem.save()
}
if (processor.id == null) {
processor.save()
}
startTimes.each {
if (it.id == null) {
it.save()
}
} catch (Exception e) {
ownerInstance.errors.reject("Failed to save the necessary objects: " + e)
status.setRollbackOnly()
}
}
이것은 Grails 2.0.1에 있습니다. 지금 데이터를 확인하는 중입니다. – Jesse
방금 기다려야 할 것 같습니다. 어쨌든 데이터를 검토 한 결과 중복이나 충돌이 없는지 확인했습니다. 내가 알 수있는 한, 이것은 데이터 발생하지 않아야합니다. 또한 임의의 데이터가 아닌 특정 데이터에서만 발생하지만 데이터에 대해 특별한 점을 알 수는 없습니다. – Jesse
흠, 흥미 롭습니다. 테이블에있는 일부 데이터의 예와이 오류의 원인이되는 예제 데이터 입력을 제공 할 수 있습니까? –