0

SRAssignment.java

@Entity
@Table(name="SR_ASSIGNEMENT", uniqueConstraints= { @UniqueConstraint
(columnNames="SRAID")})
@SequenceGenerator(name="SRASSIGNMENT_SEQUENCE", initialValue=1, allocationSize=1)
public class SRAssignment implements Serializable{

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, 
generator="SRASSIGNMENT_SEQUENCE")
@Column(name="SRAID", nullable=false)
private long sraId;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="EMPNO")
private Employee employee;

@OneToOne(fetch=FetchType.EAGER, mappedBy="srNo", optional=false)
private ServiceRequest serviceRequest;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="assignedBy")
private Employee assignedBy;

@Column(name="ASSIGNEDON")
@Temporal(TemporalType.TIMESTAMP) 
private Date assignedOn;

@OneToOne(fetch=FetchType.LAZY, optional=true, mappedBy="slotNo")
private ScheduleSlot startSlot;

@OneToOne(fetch=FetchType.LAZY , optional=true, mappedBy="slotNo")
private ScheduleSlot expectedEndSlot;

@OneToOne(fetch=FetchType.LAZY , optional=true, mappedBy="slotNo")
private ScheduleSlot actualEndSlot;

@Column(name="SRA_COMMENT", nullable=true)
private String comment;

@Column(name="ATTACHMENT", nullable=true)
private Object attachment;

....

ServiceRequest.java

@Entity
@Table(name="SERVICE_REQUEST", uniqueConstraints = {@UniqueConstraint(columnNames=     
{"SRNO"})})
@SequenceGenerator(name="SERVICE_REQUEST_SEQUENCE", initialValue=1, allocationSize=100)
public class ServiceRequest implements Serializable {

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, 
generator="SERVICE_REQUEST_SEQUENCE")
@Column(name="SRNO",  nullable=false)
private long srNo;

@Column(name="DESCRIPTION")
private String description;

@Column(name="STATUS") 
private int status;


@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="CUSTNO", referencedColumnName="CustNO")
private Customer customer;

@Column(name="DATECREATED")
private Date dateCreated;

@Column(name="DATEUPDATED")
private Date dateUpdated;
...


ServiceRequest request = workPersistence.getRequestById(assigner.getRequestId());
Employee employee = workPersistence.getEmployeeById(assigner.getTechnician());
Employee manager = workPersistence.getEmployeeById(assigner.getAssignedBy());
SRAssignment assignment = new SRAssignment();

assignment.setEmployee(employee);
assignment.setAssignedBy(manager);
assignment.setServiceRequest(request);
assignment.setAssignedOn(Calendar.getInstance().getTime());

EntityManager em = entityManagerFactory.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(assignment);
em.refresh(assignment);
System.out.println("refresh assignment, now commiting...");
tx.commit();

私が得るエラーは次のとおりです。

リフレッシュ割り当て、現在コミット中... javax.persistence.RollbackException: com.ge.dsp.iwork.persistence.JpaWorkPersistence の org.datanucleus.api.jpa.JPAEntityTransaction.commit(JPAEntityTransaction.java:118) でトランザクションをコミットできませんでした。 com.ge.dsp.iwork.impl.WorkServiceImpl.getRequestAssigned(WorkServiceImpl.java:146) の assignRequest(JpaWorkPersistence.java:417) com.ge.dsp.iwork.impl.WorkServiceImpl.assignRequest(WorkServiceImpl.java:112) のcom.ge.dsp.iwork.test.WorkServiceTest.testServiceRequestAssignment(WorkServiceTest.java:85) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) Java で。org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581) の lang.reflect.Method.invoke(Method.java:597) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods( AbstractAutowireCapableBeanFactory.java:1522) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) org org.springframework.beans.factory.support の .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)。AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java) :291) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) で org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) で org.springframework. context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69) org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) で org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) で org. org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) で java.lang. Thread.run(Thread.java:662) 原因: javax.persistence.PersistenceException: Insert of object "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" using statementspringframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) at org.springframework.osgi.context.support .AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) at java.lang.Thread.run(Thread.java) :662) 原因: javax.persistence.PersistenceException: Insert of object "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" using statementspringframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) at org.springframework.osgi.context.support .AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) at java.lang.Thread.run(Thread.java) :662) 原因: javax.persistence.PersistenceException: Insert of object "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" using statementAbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java) :320) org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) で java.lang.Thread.run(Thread.java:662) で 原因: javax. persistence.PersistenceException: ステートメントを使用したオブジェクト "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" の挿入AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java) :320) org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) で java.lang.Thread.run(Thread.java:662) で 原因: javax. persistence.PersistenceException: ステートメントを使用したオブジェクト "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" の挿入355) org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) で org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) で org.springframework.osgi .extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) の java.lang.Thread.run(Thread.java:662) 原因: javax.persistence.PersistenceException: オブジェクト "com の挿入.ge.dsp.iwork.entity.SRAssignment@7edab86b" using ステートメント355) org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) で org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) で org.springframework.osgi .extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132) の java.lang.Thread.run(Thread.java:662) 原因: javax.persistence.PersistenceException: オブジェクト "com の挿入.ge.dsp.iwork.entity.SRAssignment@7edab86b" using ステートメントjava.lang.Thread.run(Thread.java: 662) 原因: javax.persistence.PersistenceException: オブジェクト "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" using ステートメントの挿入java.lang.Thread.run(Thread.java: 662) 原因: javax.persistence.PersistenceException: オブジェクト "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" using ステートメントの挿入persistence.PersistenceException: ステートメントを使用したオブジェクト "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" の挿入persistence.PersistenceException: ステートメントを使用したオブジェクト "com.ge.dsp.iwork.entity.SRAssignment@7edab86b" の挿入"INSERT INTO SR_ASSIGNEMENT (ASSIGNEDBY,SRA_COMMENT,EMPNO,ASSIGNEDON,SRAID) VALUES (?,?,?,?,?)" が失敗しました: ORA-01400: NULL を ("DSP_QA_4"."SR_ASSIGNEMENT"."SRNO") に挿入できません)

    at org.datanucleus.api.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:270)
    at org.datanucleus.api.jpa.JPAEntityTransaction.commit(JPAEntityTransaction.java:116)
    ... 25 more

原因: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: NULL を ("DSP_QA_4"."SR_ASSIGNEMENT"."SRNO") に挿入できません

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
    at org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.datanucleus.store.rdbms.SQLController.executeStatementUpdate(SQLController.java:419)
    at org.datanucleus.store.rdbms.request.InsertRequest.execute(InsertRequest.java:411)
    at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertTable(RDBMSPersistenceHandler.java:166)
    at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertObject(RDBMSPersistenceHandler.java:142)
    at org.datanucleus.state.JDOStateManager.internalMakePersistent(JDOStateManager.java:2377)
    at org.datanucleus.state.JDOStateManager.flush(JDOStateManager.java:3769)
    at org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3884)
    at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3807)
    at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3747)
    at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4137)
    at org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428)
    at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:400)
    at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:288)
    at org.datanucleus.api.jpa.JPAEntityTransaction.commit(JPAEntityTransaction.java:103)
    ... 25 more

serviceRequest 情報を取得せず、割り当てに挿入する SRNO を取得しないのはなぜですか? また、次のことを試みると同じ関係で:

EntityManager em = entityManagerFactory.createEntityManager();
Query query = em
.createQuery(
"SELECT assignment FROM SRAssignment assignment WHERE assignment.sraId = :sraId")
            .setParameter("sraId", new Long(assignmentId));
List<SRAssignment> assignments = query.getResultList();
SRAssignment sra = (SRAssignment) assignments.get(0);
    System.out.println(sra.getSraId());
    System.out.println(sra.getEmployee().getEmpNo());
    System.out.println("________________________________________");
    System.out.println(sra.getServiceRequest().getSrNo());
    System.out.println();
    em.close();

System.out.println(sra.getServiceRequest().getSrNo());という行にヒットするとすぐに

次のようなエラーが表示され ます: __ _ __ _ __ __ _ __ __ _ ___ スレッド「SpringOsgiExtenderThread-88」での例外 org.springframework.beans.factory.BeanCreationException: URL [bundle://178.33:0/META-INF/spring/module-context.xml] で定義された名前 'testGetAssignmentById' を持つ Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.persistence.PersistenceException: Cannot perform operation "==" on org.datanucleus.store.rdbms.sql.expression.ObjectExpression@843249a および org.datanucleus.store.rdbms.sql.expression.NumericExpression@7017feb2 です。 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.

4

1 に答える 1

0

わかりました。今すぐ取得しました...JPA仕様では、ターゲットテーブルに外部キーを使用した単方向のOneToOneは許可されていません。両方向にOneToOneを定義する必要があります..myppedByを使用するようにserviceRequestでonetooneを定義しました...SRAssignmentを次のように変更しました。

@OneToOne(fetch=FetchType.LAZY )
@JoinColumn(name="SRNO", nullable=false)
private ServiceRequest serviceRequest;

およびServiceRequestとして:

@OneToOne (fetch=FetchType.LAZY, optional=true,  mappedBy="serviceRequest")
private SRAssignment assignment;

ありがとう

于 2012-10-05T18:25:07.080 に答える