简体   繁体   English

JPA休眠一对多……在单元测试中违反约束

[英]JPA Hibernate one to many… throwing constraint violation.. in unit testing

I have picked up a legacy project, and am writing tests for them... but the tests seem to fail with constraint violation could not insert Car... 我选择了一个旧项目,并正在为它们编写测试...但是由于约束违例,测试似乎失败了,无法插入Car ...

The two classes... 这两个班...

one class has the following mapping: 一类具有以下映射:

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(targetEntity=Cars.class, cascade=CascadeType.ALL, mappedBy="factory")
public List<Cars> getCars() {
    return cars;
}

the class on the many side has the following class: 在许多方面的课程都有以下课程:

@OneToOne(targetEntity=Factory.class, optional=false)
@JoinColumn(name="factory_id")
public Factory getFactory() {
    return factory;
}

This fails in my tests, using hsql.. but works fine in the SQL server when fully deployed war app apparently... have not tested it myself, but was told it does. 这在我使用hsql ..的测试中失败了,但是当完全部署的war应用程序显然在SQL服务器中工作正常时……我自己没有测试过,但是被告知可以。

I think it has something to do with the the mapping of the relationship... 我认为这与关系的映射有关...

my stack trace: 我的堆栈跟踪:

java.lang.Exception: Unexpected exception, expected<java.lang.IllegalStateException> but was<javax.persistence.PersistenceException>
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:29)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:44)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert: [com.test.Car]
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1174)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:674)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)

logging give me the following: 记录给我以下内容:

[2013-03-19 13:27:14,330] ERROR  [      main] [    JDBCExceptionReporter] - integrity constraint violation: unique constraint or index violation; SYS_CT_10074 table: CAR

chnage to manyToOne.. and it wil work. 改变manyToOne ..并且可以正常工作。 mapping was incorrect. 映射不正确。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM