Всем привет. Есть три таблицы: table1, table2, table3| Код | -- ----------------------------------------------------- -- Table `jetscart`.`table1` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `jetscart`.`table1` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , PRIMARY KEY (`id`) ) ENGINE = InnoDB;
-- ----------------------------------------------------- -- Table `jetscart`.`table2` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `jetscart`.`table2` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , PRIMARY KEY (`id`) ) ENGINE = InnoDB;
-- ----------------------------------------------------- -- Table `jetscart`.`table3` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `jetscart`.`table3` ( `table1_id` INT UNSIGNED NOT NULL , `table2_id` INT UNSIGNED NOT NULL , `value` INT NULL , PRIMARY KEY (`table1_id`, `table2_id`) , INDEX `fk_table3_table1` (`table1_id` ASC) , INDEX `fk_table3_table2` (`table2_id` ASC) , CONSTRAINT `fk_table3_table1` FOREIGN KEY (`table1_id` ) REFERENCES `jetscart`.`table1` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_table3_table2` FOREIGN KEY (`table2_id` ) REFERENCES `jetscart`.`table2` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
|
И классы к ним Table1 | Код | @Entity @Table(catalog = "jetscart", name = "table1") public class Table1 { ...
private Collection<Table3> table3sById;
@OneToMany(mappedBy = "table1ByTable1Id", cascade = CascadeType.ALL) public Collection<Table3> getTable3sById() { return table3sById; }
public void setTable3sById(Collection<Table3> table3sById) { this.table3sById = table3sById; } }
|
Table2 | Код | @Entity @Table(catalog = "jetscart", name = "table2") public class Table2 { .............
private Collection<Table3> table3sById;
@OneToMany(mappedBy = "table2ByTable2Id", cascade = CascadeType.ALL) public Collection<Table3> getTable3sById() { return table3sById; }
public void setTable3sById(Collection<Table3> table3sById) { this.table3sById = table3sById; }
|
Table3 | Код | @Entity @Table(catalog = "jetscart", name = "table3") @IdClass(Table3PK.class) public class Table3 { ......
private Table2 table2ByTable2Id;
@ManyToOne @JoinColumn(name = "table2_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false) public Table2 getTable2ByTable2Id() { return table2ByTable2Id; }
public void setTable2ByTable2Id(Table2 table2ByTable2Id) { this.table2ByTable2Id = table2ByTable2Id; }
private Table1 table1ByTable1Id;
@ManyToOne @JoinColumn(name = "table1_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false) public Table1 getTable1ByTable1Id() { return table1ByTable1Id; }
public void setTable1ByTable1Id(Table1 table1ByTable1Id) { this.table1ByTable1Id = table1ByTable1Id; } }
|
Класс SLB | Код | @Remote(TestRemote.class) @Stateless(mappedName = "ejb/TestService", name = "TestRemoteEJB") public class Test { @PersistenceContext(unitName = "JetscartUnit", type = PersistenceContextType.TRANSACTION) protected EntityManager em;
@TransactionAttribute(value = TransactionAttributeType.REQUIRED) public void test() { Table1 table1 = new Table1(); Table2 table2 = new Table2(); Table3 table3 = new Table3();
ArrayList<Table3> table3ArrayList = new ArrayList<Table3>(1); table3ArrayList.add(table3);
table1.setTable3sById(table3ArrayList);
table2.setTable3sById(table3ArrayList);
table3.setTable1ByTable1Id(table1); table3.setTable2ByTable2Id(table2);
em.persist(table1); em.persist(table2); em.persist(table3); } }
|
после выхода из метода получаю | Цитата | [#|2009-03-05T15:42:45.519+0200|FINE|sun-appserver9.1|......|INSERT INTO jetscart.table1 (id) VALUES (?) bind => [0]|#]
[#|2009-03-05T15:42:45.566+0200|FINE|sun-appserver9.1|......|INSERT INTO jetscart.table2 (id) VALUES (?) bind => [0]|#]
[#|2009-03-05T15:42:45.613+0200|FINE|sun-appserver9.1|......|INSERT INTO jetscart.table3 (table1_id, table2_id, value) VALUES (?, ?, ?) bind => [0, 0, 0]|#]
[#|2009-03-05T15:42:45.660+0200|WARNING|sun-appserver9.1|.....| Local Exception Stack: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b04-fcs (04/11/2008))): oracle.toplink.essentials.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`jetscart/table3`, CONSTRAINT `fk_table3_table1` FOREIGN KEY (`table1_id`) REFERENCES `table1` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) Error Code: 1452 Call: INSERT INTO jetscart.table3 (table1_id, table2_id, value) VALUES (?, ?, ?) bind => [0, 0, 0] Query: InsertObjectQuery(com.jetscart.model.Table3@0) at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:311) at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:654) at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:703)
|
Сбствено вопрос: Что у меня не правильно и как бороться с этой ошибкой ?
Присоединённый файл ( Кол-во скачиваний: 5 )
relations.JPG 10,75 Kb
|