Spring과 Hibernate에서 Play 프레임 워크를 사용하고 있으며 일대일 관계가 포함 된 엔티티를 저장하려고하면 다음 오류가 발생합니다 다른 기업에 JpaSystemException : null 일대일 특성에서 ID를 할당하려고 시도했습니다.
[play] Caused by: org.springframework.orm.jpa.JpaSystemException: attempted to assign id from null one-to-one property [org.famian.web.models.domains.StudyCriteria.ensatIdent]; nested exception is org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [org.famian.web.models.domains.StudyCriteria.ensatIdent]
[play] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:244) ~[spring-orm-4.0.7.RELEASE.jar:4.0.7.RELEASE]
[play] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:155) ~[spring-orm-4.0.7.RELEASE.jar:4.0.7.RELEASE]
[play] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) ~[spring-orm-4.0.7.RELEASE.jar:4.0.7.RELEASE]
[play] at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.0.7.RELEASE.jar:4.0.7.RELEASE]
[play] at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.0.7.RELEASE.jar:4.0.7.RELEASE]
[play] Caused by: org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [org.famian.web.models.domains.StudyCriteria.ensatIdent]
[play] at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:98) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
[play] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
[play] at org.hibernate.jpa.event.internal.core.JpaMergeEventListener.saveWithGeneratedId(JpaMergeEventListener.java:73) ~[hibernate-entitymanager-4.3.6.Final.jar:4.3.6.Final]
[play] at org.hibernate.event.internal.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:271) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
[play] at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:251) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
2 개의 엔티티
내 수업을 아래 공통 기본 키를 공유 할 수 있습니다@Entity
public class EnsatIdent implements Serializable {
@EmbeddedId
private EnsatIdentPK id;
@OneToOne(mappedBy = "ensatIdent", cascade = CascadeType.ALL)
private StudyCriteria studyCriteria;
}
@Entity
public class StudyCriteria {
@EmbeddedId
private EnsatIdentPK id;
@MapsId
@JoinColumns({
@JoinColumn(name = "center_id"),
@JoinColumn(name = "ensat_id")
})
@OneToOne
private EnsatIdent ensatIdent;
}
@Embeddable
public class EnsatIdentPK implements Serializable {
@Column(name = "center_id", columnDefinition = "varchar(5)")
private String centerId;
@Column(name = "ensat_id", columnDefinition = "int(11)")
private Integer ensatId;
}
내 서비스 클래스는 봄 PagingAndSortingRepository 클래스를 확장 IdenService라는 클래스이다. 내가 저장하면 내가
ensatIdent.getStudyCriteria()에에서 System.out.println()를 할 경우에, 나는
IdenService service.save(ensatIdent)
라고
는
보여줍니다 StudyCriteria (ID = EnsatIdentPK (centerId = GYMU, ensatId = 3))
엔터티에 Ident 정보 만 포함되어 있으면 저장이 잘되지만 개체에 studyCriteria를 추가하면 오류가 발생합니다. 나는 무슨 일이 일어나고 있는지 이해하지 못한다. 제발 도와 줘.