title: Hibernate Cannot add or update a child row: a foreign key constraint fails
body: <p>When I'm trying to save object into database I got error: </p>
  
  <pre><code>java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`smartphones`.`smartphone`, CONSTRAINT `fk_smartphone_resolution1` FOREIGN KEY (`resolution_id`) REFERENCES `resolution` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
  </code></pre>
  
  <p><br></p>
  
  <p>First thing is I have wrong name of references column in <code>Smartphone</code> class but I checked and it looks well. Maybe someone figure out what is the reason of this issue?</p>
  
  <p>Short database screenshot <br></p>
  
  <p><a href="https://i.stack.imgur.com/v6DiT.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/v6DiT.png" alt="enter image description here"></a></p>
  
  <p>SQL script to create smartphone table</p>
  
  <pre><code>CREATE TABLE IF NOT EXISTS `smartphones`.`smartphone` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(45) NULL DEFAULT NULL,
        `resolution_id` INT(11) NOT NULL,
                 ...other
        PRIMARY KEY (`id`, `resolution_id`),
        UNIQUE INDEX `id_UNIQUE` (`id` ASC),
        INDEX `fk_smartphone_resolution1_idx` (`resolution_id` ASC),
        CONSTRAINT `fk_smartphone_resolution1`
          FOREIGN KEY (`resolution_id`)
          REFERENCES `smartphones`.`resolution` (`id`)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION)
  </code></pre>
  
  <p><code>Smartphone</code> class but with one relationship object.</p>
  
  <pre><code>package com.project.model;
  
  import javax.persistence.*;
  
  @Entity
  public class Smartphone {
      private int id;
      private String name;
      private Resolution resolutionId;
  
      @Id
      @Column(name = "id")
      public int getId() {
          return id;
      }
  
      public void setId(int id) {
          this.id = id;
      }
  
      @Basic
      @Column(name = "name")
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      @ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.PERSIST)
      @JoinColumn(name = "resolution_id", referencedColumnName = "id", nullable = false)
      public Resolution getResolutionId() {
          return resolutionId;
      }
  
      public void setResolutionId(Resolution resolutionId) {
          this.resolutionId = resolutionId;
      }
  }
  </code></pre>
  
  <p>[Edit: Parsing smartphone model and saving into database]</p>
  
  <pre><code>@RequestMapping(value = { "apple" }, method = RequestMethod.GET)
      public String parseApple(ModelMap model) {
  
          try {
              String appleData = Utilities.getResourceAsString(this, "json/apple.json");
  
              JSONArray array = new JSONArray(appleData);
  
              Session session = sessionFactory.openSession();
              Transaction transaction = session.beginTransaction();
  
              for (int i = 0; i &lt; array.length(); i++) {
                  Smartphone smartphone = new Smartphone();
  
                  String resolutionValue = array.getJSONObject(i).getString("resolution");
                  String resolution_w = resolutionValue.split(" ")[0];
                  String resolution_h = resolutionValue.split(" ")[2];
                  Resolution resolution = new Resolution();
                  resolution.setHeight(Integer.valueOf(resolution_h));
                  resolution.setWidth(Integer.valueOf(resolution_w));
                  resolution.setTypeId(typeService.findByCode(session, Resolution.serialId));
                  session.save(resolution);
  
                  smartphone.setResolutionId(resolution);
                  //other
  
                  session.save(smartphone);
                  break;
              }
              transaction.commit();
              sessionFactory.close();
  
          } catch (IOException e) {
              e.printStackTrace();
          }
  
          return "index";
      }
  </code></pre>
  
  <p>[Edit: Added] Resolution class:</p>
  
  <pre><code>@Entity
  public class Resolution {
      public static final int serialId = 106;
  
      private int id;
      private Integer height;
      private Integer width;
      private Type typeId;
      private Collection&lt;Smartphone&gt; resolutionId;
  
      @Id
      @Column(name = "id")
      public int getId() {
          return id;
      }
  
      public void setId(int id) {
          this.id = id;
      }
  
      @Basic
      @Column(name = "height")
      public Integer getHeight() {
          return height;
      }
  
      public void setHeight(Integer height) {
          this.height = height;
      }
  
      @Basic
      @Column(name = "width")
      public Integer getWidth() {
          return width;
      }
  
      public void setWidth(Integer width) {
          this.width = width;
      }
  
      @ManyToOne(fetch=FetchType.EAGER)
      @JoinColumn(name = "type_id", referencedColumnName = "id", nullable = false)
      public Type getTypeId() {
          return typeId;
      }
  
      public void setTypeId(Type typeId) {
          this.typeId = typeId;
      }
  
      @LazyCollection(LazyCollectionOption.FALSE)
      @OneToMany(mappedBy = "resolutionId")
      public Collection&lt;Smartphone&gt; getResolutionId() {
          return resolutionId;
      }
  
      public void setResolutionId(Collection&lt;Smartphone&gt; resolutionId) {
          this.resolutionId = resolutionId;
      }
  }
  </code></pre>