これは、JPA 2.0 (Eclipselink 2.4.1) を使用した継承と双方向マッピングに関する質問です。
まず第一に;これが最善の方法であるかどうか、またそれが可能かどうかはわかりません。同じこと、またはほぼ同じことを行うためのより良い方法があると思われる場合は教えてください。
ユーザーをさまざまな種類の車両 (車とトラック) にマッピングするシステムを実装しようとしています。すべての車両には少なくとも 1 つの写真があります。すべての種類の写真 (CarPhoto や TruckPhoto のようなもの) に対してサービスを実行したくないので、写真 (つまり VehiclePhoto) に対してのみ 1 つのクラスを使用することをお勧めします。
その上にUMLダイアグラムのようなものをスケッチしました:
あなたは私を助けることができますか?よろしくお願いします=)
私は次のようにそれを実装しようとしました:
@MappedSuperclass
public abstract class GenericPhoto {
// Abstract class which is common for all kind of photos.
// Can be omitted in this example, but I will include it
// anyway.
protected String description;
//..
}
@Entity
@Table(name="VEHICLEPHOTO")
public class VehiclePhoto extends GenericPhoto {
// This class inherit from GenericPhoto and is a
// photo class for all vehicles (e.g. Car, Truck, ..)
// This class must know its dependency, since bi-directional
// relationship is required.
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "GENERICVEHICLE_ID")
private GenericVehicle genericVehicle;
private boolean coverPhoto;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class GenericVehicle {
// This class is common for all vehicles. For example,
// registration number is common for all vehicles since
// all vehicles needs a registrationnumber.
//
// All vehicles also has one or more VehiclePhoto's which shall
// have a bi-directional relationship to it.
//
// All vehicles also has one User which shall be bi-directional
// relationship.
@Id
@GeneratedValue
protected Long id;
@OneToMany(mappedBy = "genericVehicle", targetEntity = VehiclePhoto.class, cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, orphanRemoval = true)
protected Set<VehiclePhoto> photos;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
protected User user;
protected String registrationNumber;
//..
}
@Entity
@Table(name = "CARS")
public class Car extends GenericVehicle implements Serializable {
// This class implements a Car and inherit the GenericVehicle
// class, since it has a registrationnumber, one or more photos
// and is owned by a user.
//
// The only specific for the Car class is the yearModel,
// gearbox type, etcetera..
private int yearModel;
//..
}
@Entity
@Table(name = "TRUCKS")
public class Truck extends GenericVehicle implements Serializable {
// Same as the Car description but different fields
}
@Entity
@Table(name = "USERS")
public class User implements Serializable {
// {{ userId
@Id
private String userId;
@OneToMany(mappedBy = "user", cascade = { CascadeType.ALL }, orphanRemoval = false, fetch = FetchType.LAZY)
private Set<Car> cars;
@OneToMany(mappedBy = "user", cascade = { CascadeType.ALL }, orphanRemoval = false, fetch = FetchType.LAZY)
private Set<Truck> trucks;
// ...
}
@Test
public void testCreatePhoto() throws Exception {
User user = new User(TEST_USER_ID, TEST_PASSWORD);
Car car = dg.getTestCar(); // Get a randomized car
Truck truck = dg.getTestTruck(); // Get a randomized truck
VehiclePhoto photoCar = dg.getVehiclePhoto(); // Get a randomized photo for car
VehiclePhoto photoTruck = dg.getVehiclePhoto(); // Get a randomized photo for truck
// Add the relationship between photoCar <-> car, photoTruck <-> truck
photoCar.setGenericVehicle(car);
Set<VehiclePhoto> photoCarsSet = new HashSet<VehiclePhoto>();
photoCarsSet.add(photoCar);
car.setPhotos(photoCarsSet);
photoTruck.setGenericVehicle(truck);
Set<VehiclePhoto> photoTrucksSet = new HashSet<VehiclePhoto>();
photoTrucksSet.add(photoTruck);
truck.setPhotos(photoTrucksSet);
// Add the relationship between user <-> car, user <-> truck
car.setUser(user);
Set<Car> carsSet = new HashSet<Car>();
carsSet.add(car);
user.setCars(carsSet);
truck.setUser(user);
Set<Truck> trucksSet = new HashSet<Truck>();
trucksSet.add(truck);
user.setTrucks(trucksSet);
// Persist the objects
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("vehicle-ejb");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(user);
entityManager.flush();
}
エラーログ:
[EL Finest]: connection: 2013-06-15 20:22:36.509--ServerSession(27042828)--Connection(1579697)--Thread(Thread[main,5,main])--Connection acquired from connection pool [default].
[EL Finer]: transaction: 2013-06-15 20:22:36.509--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--begin transaction
[EL Finest]: query: 2013-06-15 20:22:36.511--ClientSession(9988705)--Thread(Thread[main,5,main])--Execute query DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + #PREALLOC_SIZE WHERE SEQ_NAME = #SEQ_NAME")
[EL Fine]: sql: 2013-06-15 20:22:36.512--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [50, SEQ_GEN]
[EL Finest]: query: 2013-06-15 20:22:36.514--ClientSession(9988705)--Thread(Thread[main,5,main])--Execute query ValueReadQuery(name="SEQUENCE" sql="SELECT SEQ_COUNT FROM SEQUENCE WHERE SEQ_NAME = #SEQ_NAME")
[EL Fine]: sql: 2013-06-15 20:22:36.515--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--SELECT SEQ_COUNT FROM SEQUENCE WHERE SEQ_NAME = ?
bind => [SEQ_GEN]
[EL Finest]: sequencing: 2013-06-15 20:22:36.516--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--local sequencing preallocation for SEQ_GEN: objects: 50 , first: 1, last: 50
[EL Finer]: transaction: 2013-06-15 20:22:36.517--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--commit transaction
[EL Finest]: sequencing: 2013-06-15 20:22:36.584--ServerSession(27042828)--Connection(1579697)--Thread(Thread[main,5,main])--local sequencing preallocation is copied to preallocation after transaction commit
[EL Finest]: connection: 2013-06-15 20:22:36.584--ServerSession(27042828)--Connection(1579697)--Thread(Thread[main,5,main])--Connection released to connection pool [default].
[EL Finest]: sequencing: 2013-06-15 20:22:36.585--UnitOfWork(7351433)--Thread(Thread[main,5,main])--assign sequence to the object (1 -> info.vehicle.domain.Car@cbda60bc)
[EL Finest]: transaction: 2013-06-15 20:22:36.67--UnitOfWork(7351433)--Thread(Thread[main,5,main])--persist() operation called on: info.vehicle.domain.VehiclePhoto@d26de99f.
[EL Finest]: sequencing: 2013-06-15 20:22:36.671--UnitOfWork(7351433)--Thread(Thread[main,5,main])--assign sequence to the object (2 -> info.vehicle.domain.VehiclePhoto@d26de99f)
[EL Finest]: transaction: 2013-06-15 20:22:36.691--UnitOfWork(7351433)--Thread(Thread[main,5,main])--persist() operation called on: info.vehicle.domain.Truck@b295c71e.
[EL Finest]: sequencing: 2013-06-15 20:22:36.691--UnitOfWork(7351433)--Thread(Thread[main,5,main])--assign sequence to the object (3 -> info.vehicle.domain.Truck@b295c71e)
[EL Finest]: transaction: 2013-06-15 20:22:36.719--UnitOfWork(7351433)--Thread(Thread[main,5,main])--persist() operation called on: info.vehicle.domain.VehiclePhoto@b297753e.
[EL Finest]: sequencing: 2013-06-15 20:22:36.72--UnitOfWork(7351433)--Thread(Thread[main,5,main])--assign sequence to the object (4 -> info.vehicle.domain.VehiclePhoto@b297753e)
[EL Finer]: transaction: 2013-06-15 20:22:36.721--UnitOfWork(7351433)--Thread(Thread[main,5,main])--begin unit of work flush
[EL Finest]: query: 2013-06-15 20:22:36.726--UnitOfWork(7351433)--Thread(Thread[main,5,main])--Execute query InsertObjectQuery(User [userId=TEST USER #1])
[EL Finest]: connection: 2013-06-15 20:22:36.728--ServerSession(27042828)--Connection(1579697)--Thread(Thread[main,5,main])--Connection acquired from connection pool [default].
[EL Finer]: transaction: 2013-06-15 20:22:36.729--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--begin transaction
[EL Fine]: sql: 2013-06-15 20:22:36.729--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--INSERT INTO USERS (USERID, PASSWORD) VALUES (?, ?)
bind => [TEST USER #1, PASSWORD]
[EL Finest]: query: 2013-06-15 20:22:36.731--UnitOfWork(7351433)--Thread(Thread[main,5,main])--Execute query InsertObjectQuery(info.vehicle.domain.Car@cbda60bc)
[EL Fine]: sql: 2013-06-15 20:22:36.733--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--INSERT INTO CARS (ID, ACTIVE, BODY, BODYSLANG, COMMERCIALNAME, CREATEDTIME, DESCRIPTION, GEARBOX, KILOMETRES, PRICE, PULLEY, REGISTRATIONNUMBER, VERIFIED, VTRMAKEMODELNAME, YEARMODEL, USER_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [1, true, _TRUCK_ORDINAL, CAR_STATION_WAGON, sacrifice, 2013-06-15 20:22:36.358, vznxclmndaawethajnahzxgxzzdurifeubrhhqajaiohnjurnrlpcjxfarpbqzqaphgvjjfhzcpozsgfctjnddmhmmncoezhxpqxqdgqgqryysgqsnmryxzlwwqlbkvrksdtrftrgqxnozochtxmznasrhbuxumjzbaqtqujnefvhaeafvcyqcodilpwbnloyzeizcbhekebsdpilfhhrtaxffvnzahnynhnkcwhyvfahrsmywdbcqzsafifwjeielpeyxhbufisfheefybldypnmtpvebnwngmjvjledwpywwbqkvdyjuqzulxdstqukmpctrpxupgpldnobttngdxuvpvjyadoapvszdanspsyoyxefumgbafxdopspbxhocefvsohyutvggoccemreeqdlowwyntgztkbmippjnvqcydkzmwkydgpzdwrxwapgxwnkzeqgmopsfsipqacnkmpvxnkyvsrobppmolfefqbmupgsuwyqefoaiuxjnhxezxnwznyqjjoszmdeuhxomlvoptwmmntjfuegdxvtewosrmpegyjbbdunidfliqyewcicmvbnztuofqovftyljmxixtdoiirrkmxgyycpje, NA, 701421, 904861, PULLEY, the284, false, jebywyypgqorighf, 2009, TEST USER #1]
[EL Finest]: query: 2013-06-15 20:22:36.755--UnitOfWork(7351433)--Thread(Thread[main,5,main])--Execute query InsertObjectQuery(info.vehicle.domain.Truck@b295c71e)
[EL Fine]: sql: 2013-06-15 20:22:36.756--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--INSERT INTO TRUCKS (ID, ACTIVE, BODY, BODYSLANG, COMMERCIALNAME, CREATEDTIME, DESCRIPTION, GEARBOX, KILOMETRES, PRICE, PULLEY, REGISTRATIONNUMBER, VERIFIED, VTRMAKEMODELNAME, YEARMODEL, USER_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [3, true, _BUS_ORDINAL, BUS_WAGON, axcsjlltvgrgqrvoyldsdykkjop, 2013-06-15 20:22:36.359, qvsiptzlmexveeppkczqcoxcpfmsdwhwamdtwsadohmtgozzxmmvnpwbhpyvzasankutoyfpwjmggsyynehtvhryybltlhdsmqfiueomijkyhewhwnllklkmcwpqnbebbupxmibaeswzgkdkhglmrhaiiehjsivrrjidfoyzvwknaqrdedocopzsluqdvmwgikmkowpobukiwhbgkfypeeetvtzsuiabyxlziqezhrgqlzcqxxhipjsqvtoxukgojhbjubvgbgagonrvbgreqopyrprmdamhssakuxqukevaeuhfopuenednnaambqixriljcwlrqenqcffpirovbzczmxpchcnuhyphtqipcpznhnrzfyofptpcsbesmcssyxaizpfuhxskpiytvpspipdkytulxpxiclqvipjvzpkjrzwqkpzpxtqesclejloawipzrbcagcmhvutkyjwsngenswwc, AUTOMATIC, 190530, 1341699, PULLEY, end208, false, hlklwoixaxg, 1993, TEST USER #1]
[EL Finest]: query: 2013-06-15 20:22:36.762--UnitOfWork(7351433)--Thread(Thread[main,5,main])--Execute query InsertObjectQuery(info.vehicle.domain.VehiclePhoto@d26de99f)
[EL Fine]: sql: 2013-06-15 20:22:36.762--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--INSERT INTO VEHICLEPHOTO (ID, COVERPHOTO, DESCRIPTION, FILE, FILENAME, TITLE, UPLOADTIME, GENERICVEHICLE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
bind => [2, false, vycazxirmtesotsfohnqnvrtx, [B@142b4dd, this, ckwbcdyalcdcvjmisozfidsxuutqqepbopvntttxadijmfsklysrzlothvlgwmrfkhkhjypbzhlbxoqo, 2013-06-15 20:22:36.359, 1]
[EL Finest]: query: 2013-06-15 20:22:36.765--UnitOfWork(7351433)--Thread(Thread[main,5,main])--Execute query InsertObjectQuery(info.vehicle.domain.VehiclePhoto@b297753e)
[EL Fine]: sql: 2013-06-15 20:22:36.765--ClientSession(9988705)--Connection(1579697)--Thread(Thread[main,5,main])--INSERT INTO VEHICLEPHOTO (ID, COVERPHOTO, DESCRIPTION, FILE, FILENAME, TITLE, UPLOADTIME, GENERICVEHICLE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
bind => [4, false, stemdxpofqjnkycmwjsvygzawpbuzdbinpyweilqhrrchyenawwkjxhxuuafsrewtbwwshcfiytwccofvzpixqebtjxyeqsakqaa, [B@a49e9a, no, oazjleqshliiicpavrvdpxiqyclzvpkgfpzcrtzteoduxmttzbmfdinetwcwzginhokrxnlbaoqzdnhivrdndoscxvtctfvojhiwbdtyzsbaspvnzgefrurcmdamxyhjwcoyvqweuaacs, 2013-06-15 20:22:36.359, 3]
[EL Fine]: sql: 2013-06-15 20:22:36.768--ClientSession(9988705)--Thread(Thread[main,5,main])--SELECT 1
[EL Warning]: 2013-06-15 20:22:36.769--UnitOfWork(7351433)--Thread(Thread[main,5,main])--Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`vehicle_test`.`VEHICLEPHOTO`, CONSTRAINT `FK_VEHICLEPHOTO_GENERICVEHICLE_ID` FOREIGN KEY (`GENERICVEHICLE_ID`) REFERENCES `CARS` (`ID`))
Error Code: 1452
Call: INSERT INTO VEHICLEPHOTO (ID, COVERPHOTO, DESCRIPTION, FILE, FILENAME, TITLE, UPLOADTIME, GENERICVEHICLE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
bind => [4, false, stemdxpofqjnkycmwjsvygzawpbuzdbinpyweilqhrrchyenawwkjxhxuuafsrewtbwwshcfiytwccofvzpixqebtjxyeqsakqaa, [B@a49e9a, no, oazjleqshliiicpavrvdpxiqyclzvpkgfpzcrtzteoduxmttzbmfdinetwcwzginhokrxnlbaoqzdnhivrdndoscxvtctfvojhiwbdtyzsbaspvnzgefrurcmdamxyhjwcoyvqweuaacs, 2013-06-15 20:22:36.359, 3]
Query: InsertObjectQuery(info.vehicle.domain.VehiclePhoto@b297753e)
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:851)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:913)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:594)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:537)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1800)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:286)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:342)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:162)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:177)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:471)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:286)
at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:852)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:751)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2875)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1602)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1584)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1535)
at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:224)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsForClassWithChangeSet(CommitManager.java:191)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:136)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3914)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1419)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:634)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithPreBuiltChangeSet(UnitOfWorkImpl.java:1565)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:445)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:798)
at info.vehicle.service.jpa.VehiclePhotoRepositoryTest.testCreatePhoto(VehiclePhotoRepositoryTest.java:94)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
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.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
at $Proxy0.invoke(Unknown Source)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:87)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`vehicle_test`.`VEHICLEPHOTO`, CONSTRAINT `FK_VEHICLEPHOTO_GENERICVEHICLE_ID` FOREIGN KEY (`GENERICVEHICLE_ID`) REFERENCES `CARS` (`ID`))
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:842)
... 67 more