有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自不适用于parentchild创建的实体的java JPA控制器

我有一个父表和子表

schema: parent(int id,varchar desc), child(int id, varchar desc, int parent_id(foreignKey)).

由此,我创建了实体,然后使用netbeans从这些实体创建了JPA控制器。 当我试图存储一个包含子对象集合的父对象时,它抛出java.lang.IllegalArgumentException: An instance of a null PK has been incorrectly provided for this find operation.。在检查了netbeans生成的JPA控制器之后,我发现它们假设父对象中的子对象有一个ID,而在我的例子中,由于子对象也是新的,所以我没有它们的ID。但我不明白的是,为什么netbeans生成的JPA控制器代码中会出现以下代码

Collection<Child> attachedChildCollection = new ArrayList<Child>();
for (Child childCollectionChildToAttach : parent.getChildCollection()) {
    childCollectionChildToAttach = em.getReference(childCollectionChildToAttach.getClass(), childCollectionChildToAttach.getId());
    attachedChildCollection.add(childCollectionChildToAttach);
}
parent.setChildCollection(attachedChildCollection);

除了手动编辑JPAControllers,有人知道解决这个问题的方法吗

下面的代码片段显示了我如何尝试存储父对象

Parent parentObj = new Parent();
parentObj.setDesc("parent");
Collection<Child> childCollection = new ArrayList<>();
Child childObj = new Child();
childObj.setDesc("child1");
childCollection.add(childObj);
Child childObj2 = new Child();
childCollection.add("childObj2");
parentObj.setChildCollection(childCollection);
parentJpaController.create(parentObj);

下面给出了创建表的脚本

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`PARENT`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`PARENT` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `DESC` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`CHILD`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`CHILD` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `DESC` VARCHAR(45) NULL ,
  `PARENT` INT NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `FK_CHILD_PARENT` (`PARENT` ASC) ,
  CONSTRAINT `FK_CHILD_PARENT`
    FOREIGN KEY (`PARENT` )
    REFERENCES `mydb`.`PARENT` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

共 (0) 个答案