title: Serializing Already had POJO for id (java.lang.String)
body: <p>I have two entities i serialized and send to client using spring framework 4.2.5 + jacksonjson 2.7.5. My entities are the following:</p>
  
  <pre><code>@Entity
  @Table(name = "entrada")
  @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="idEntrada")
  public class EntradaTest implements Serializable {
  private static final long serialVersionUID = 1L;
  
  @Id
  @Column(name = "id_entrada", unique = true, nullable = false)
  private String idEntrada;
  
  @Column(nullable = false, length = 5)
  private String codigo;
  
  private Integer recibidos;
  
  @ManyToOne
  @JsonIdentityReference(alwaysAsId = true)
  @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idEmpleado", scope = Empleado.class)
  @JoinColumn(name = "id_pesador_bruto")
  private Empleado pesadorBruto;
  
  @ManyToOne
  @JsonIdentityReference(alwaysAsId = true)
  @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "dEmpleado", scope = Empleado.class)
  @JoinColumn(name = "id_pesador_tara")
  private Empleado pesadorTara;
  
  @ManyToOne
  @JsonIdentityReference(alwaysAsId = true)
  @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idEmpleado", scope = Empleado.class)
  @JoinColumn(name = "id_representante_bruto")
  private Empleado representanteBruto;
  
  @ManyToOne
  @JsonIdentityReference(alwaysAsId = true)
  @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "idEmpleado", scope = Empleado.class)
  @JoinColumn(name = "id_representante_tara")
  private Empleado representanteTara;
  
  @ManyToOne
  @JoinColumn(name = "id_oficina", nullable = false)
  private Entidad oficina;
  }
  
  @Entity
  @Table(name = "empleado")
  @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="idEmpleado", scope = Empleado.class)
  class Empleadoest implements Serializable {
  private static final long serialVersionUID = 1L;
  
  @Id
  @Column(name = "id_empleado", unique = true, nullable = false)
  private String idEmpleado;
  
  @Column(nullable = false, length = 125)
  private String nombre;
  
  @OneToMany(mappedBy = "pesadorBruto")
  private Set&lt;Entrada&gt; entradasPesadorBruto;
  
  @OneToMany(mappedBy = "pesadorTara")
  private Set&lt;Entrada&gt; entradasPesadorTara;
  
  @OneToMany(mappedBy = "representanteBruto")
  private Set&lt;Entrada&gt; entradasRepresentanteBruto;
  
  @OneToMany(mappedBy = "representanteTara")
  private Set&lt;Entrada&gt; entradasRepresentanteTara;
  }
  </code></pre>
  
  <p>My REST service end points are</p>
  
  <pre><code>@RequestMapping(value = "/entradas/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity&lt;Entrada&gt; getEntrada(@PathVariable("id") String idEntrada) {
  Entrada entrada = entradaService.get(idEntrada);
  if (entrada == null) {
  return new ResponseEntity&lt;Entrada&gt;(HttpStatus.NOT_FOUND);
  }
  return new ResponseEntity&lt;Entrada&gt;(entrada, HttpStatus.OK);
  }
  
  @RequestMapping(value = "/entradas/", method = RequestMethod.POST)
  public ResponseEntity&lt;Void&gt; createEntrada(@RequestBody Entrada entrada, UriComponentsBuilder ucBuilder) {
  
  entradaService.save(entrada);
  
  HttpHeaders headers = new HttpHeaders();
  headers.setLocation(ucBuilder.path("/entradas/{id}").buildAndExpand(entrada.getIdEntrada()).toUri());
  return new ResponseEntity&lt;Void&gt;(headers, HttpStatus.CREATED);
  }
  </code></pre>
  
  <p>The serialized data I send to the client looks like:</p>
  
  <pre><code>{
  "idEntrada": "e375ecf9-dabd-4c76-8813-0679818f9590",
  "codigo": "378-2",
  "recibidos": 0,
  "pesadorBruto": "0c23c490-a54a-495d-9447-dc6227520646",
  "pesadorTara": "874dfe26-11cb-48e4-916e-bf8a83187dcb",
  "representanteBruto": "5fb567af-805a-40dc-84bc-8f6038d8cd2f",
  "representanteTara": "5fb567af-805a-40dc-84bc-8f6038d8cd2f",
  "oficina": {
  "idEntidad": "f3964add-3ae8-4392-bafc-cffb9643ec15",
  "nombre": "O.P.C.",
  },
  }
  </code></pre>
  
  <p>But when i try to send data back to the server as following to create a new entity</p>
  
  <pre><code>{
  "idEntrada":"e375ecf9-dabd-4c76-8813-0679818f9590",
  "codigo":"378-2",
  "pesadorBruto":{
  "idEmpleado":"0c23c490-a54a-495d-9447-dc6227520646",
  "nombre":"J. CABRERA",
  },
  "pesadorTara":{
  "idEmpleado":"874dfe26-11cb-48e4-916e-bf8a83187dcb",
  "nombre":"L. A. DELGADO",
  },
  "representanteBruto":{
  "idEmpleado":"5fb567af-805a-40dc-84bc-8f6038d8cd2f",
  "nombre":"C. MARQUEZ",
  },
  "representanteTara":{
  "idEmpleado":"5fb567af-805a-40dc-84bc-8f6038d8cd2f",
  "nombre":"C. MARQUEZ",
  },
  "oficina":{
  "idEntidad":"f3964add-3ae8-4392-bafc-cffb9643ec15",
  "nombre":"O.P.C.",
  },
  }
  </code></pre>
  
  <p>Jackson fails:</p>
  
  <pre><code>Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException:
  Could not read document: Already had POJO for id (java.lang.String)
  [[ObjectId: key=5fb567af-805a-40dc-84bc-8f6038d8cd2f,
  type=com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator,
  scope=lt.ciader.model.Empleado]]
  (through reference chain: lt.ciader.model.Entrada["representanteTara"]-&gt;lt.ciader.model.Empleado["idEmpleado"]);
  nested exception is com.fasterxml.jackson.databind.JsonMappingException:
  Already had POJO for id (java.lang.String)
  [[ObjectId: key=5fb567af-805a-40dc-84bc-8f6038d8cd2f,
  type=com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator,
  scope=lt.ciader.model.Empleado]]
  (through reference chain: lt.ciader.model.Entrada["representanteTara"]-&gt;lt.ciader.model.Empleado["idEmpleado"])
  </code></pre>
  
  <p>I know that representanteTara is the same sa representateBruto but it can be the same employment acoording to my model, even pesadorTara and PesadorBruto too. </p>
  
  <p>When i send data with differents empleados my service get data and serialized it without problems.
  I googled to find a solution but i can't find an answer that help me. I review:</p>
  
  <p><a href="https://stackoverflow.com/questions/15422838/jsonmappingexception-already-had-pojo-for-id">JsonMappingException: Already had POJO for id</a></p>
  
  <p><a href="https://stackoverflow.com/questions/36506536/jackson-already-had-pojo-for-id">Jackson Already had POJO for id</a></p>
  
  <p><a href="https://stackoverflow.com/questions/26476808/spring-rest-error-the-second-time-that-saves-object-with-child-properties-that-r">Spring Rest error the second time that saves Object with child properties that references the same father the second time: Already had POJO for id</a></p>
  
  <p><a href="https://groups.google.com/forum/#!topic/jackson-user/TSloBi1C_qk" rel="nofollow noreferrer">https://groups.google.com/forum/#!topic/jackson-user/TSloBi1C_qk</a></p>
  
  <p><a href="https://github.com/edwinquaihoi/jsonidentitymanytomany/issues/1" rel="nofollow noreferrer">https://github.com/edwinquaihoi/jsonidentitymanytomany/issues/1</a></p>
  
  <p><a href="https://github.com/FasterXML/jackson-databind/issues/266" rel="nofollow noreferrer">https://github.com/FasterXML/jackson-databind/issues/266</a></p>
  
  <p>What i doing wrong. How can I solve the problem.</p>