2014-03-31 81 views
0

我與JPA ManyToOne關係有問題。我有兩個實體(HikeList,用戶):JPA - 多對一關係不起作用

@Entity 
@Table(name = "T_HIKELIST") 
public class Hikelist implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private long id; 

    @Size(min = 1, max = 50) 
    @ManyToOne(optional = false) 
    @JoinColumn(name = "login", referencedColumnName = "login") 
    private User user; 
... 
} 

而且

@Entity 
@Table(name = "T_USER") 
public class User implements Serializable { 

    @NotNull 
    @Size(min = 0, max = 50) 
    @Id 
    private String login; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user") 
    private Collection<Hikelist> hikeListCollection; 
... 
} 

我的測試類:

... 
    @Test 
    public void testCreateUser() { 
     User user = new User(); 
     user.setLogin("thomaslogin"); 
     user.setEmail("[email protected]"); 
     user.setPassword("thomas"); 
     user.setFirstName("thomas"); 
     user.setLastName("thomas"); 
     userService.createUser(user); 

     Hikelist hike = new Hikelist(); 
     hike.setId(new Long(1L)); 
     hike.setLabel("GR20"); 
     hike.setUser(user); 
     hikeService.createHikeList(hike); 

     Hikelist hike1 = hikeRepository.findOne(new Long(1L)); 
     assertNotNull(hike1); 
    } 

我m到處當我打電話是以下錯誤:hikeService.createHikeList (遠足);

有人知道我錯了嗎? 預先感謝您。

org.springframework.transaction.TransactionSystemException:不能 提交JPA事務;嵌套的異常是 javax.persistence.RollbackException:錯誤而在 org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit犯在 org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:524)的 交易 (AbstractPlatformTransactionManager.java:757) 在 org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726) 在 org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478) 在 org.springframework.transaction.interceptor.T ransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 179) 在 org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 在 com.breizh.packlight.service.HikelistService $$ EnhancerBySpringCGLIB $$ 38379214.createHikeList() 在 COM .breizh.packlight.service.HikelistServiceTest.testCreateUser(HikelistServiceTest.java:60) at sun.reflect.NativeMethodAccessorI mpl.invoke0(本機方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method中。 invoke(Method.java:606)at org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java: 12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 在 org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat。的java:72) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) at org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238)at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:63)at org.junit.runners.ParentRunner.runChildren( org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:53)at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:229)at org.springframework。 test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallb ack.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:309)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 有機.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 有機.eclipse.jdt.internal.junit .runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit .runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 引起:javax.persistence.RollbackException:錯誤而提交 在 org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)交易 在 org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:515) ... 37更多原因:javax.validation.UnexpectedTypeException: HV000030:找不到類型驗證程序: com.breizh.packlight.domain.User。在 org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218) 在 org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.findMatchingValidatorClass(ConstraintValidatorManager.java:193) 在 org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:97) 在 org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125) 在 org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91) 在 org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85) 在 org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:478) 在 org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:424) 在 org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:388) 在 org.hibernate作爲.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:340) at org.hibernate.validator.internal。engine.ValidatorImpl.validate(ValidatorImpl.java:158) 在 org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:137) 在 org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener。的java:95) 在 org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:206) 在 org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:96) 在 有機.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:453) 在 org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:345) 在 org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350) 在 org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56) 在org.hibernate.internal。 SessionImpl.flush(SessionImpl.java:1218) 在 org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:421) 在 org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction。的java:101) 在 org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177) 在 org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77) ...... 38多個

回答

1

的錯誤是:

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: com.breizh.packlight.domain.User 

而且它是由

@Size(min = 1, max = 50) 
private User user; 
引起

用戶如何可以有1到50之間的大小?

驗證約束應用的Java對象。不是數據庫中的列。您已確保登錄的大小合適,並且用戶字段映射到具有外鍵約束的列,因此@Size註釋不僅不起作用,而且不必要。

+0

我不停地一遍又一遍讀我的代碼找到一個空的錯誤,但沒有找到it.Thanks很多關於打開我的眼睛... – user1260928