I update a EJB Entity and after insert call the record is corrupted...
A value 147.163.0.61 is inserted as 沿47.163.0.61.
The first character is corrupted.
My solution is a persist (with flush) of partial record (with many object attributes insertable=false) and a merge.
I think that problem is many attributes of type java.util.Date. Attributes of type Date are updated but but not inserted.
@Entity @Table(name = "TB_LOG") public class Log implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "OID", updatable = false) @SequenceGenerator(name = "SEQUENCE", sequenceName = "SEQ_TB_LOG_WSR", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE") private long oid; @Column(name = "CLI", nullable = false, updatable = false) private String clientAddress; @Lob @Basic(fetch=FetchType.LAZY) @Column(name = "SOA_REQ", nullable = true, insertable=false) private String request; @Lob @Basic(fetch=FetchType.LAZY) @Column(name = "SOA_RES", nullable = true, insertable=false) private String response; @Column(name = "DAT", nullable = true, insertable = false) private Date date; .... .... }
Log log = new Log(); log.setClientAddress(new String(address.toString())); // non so perchè ma necessita ricreare la stringa // altrimenti sulla INSERT del db accade un casino // !!! BOOOOO em.persist(log); em.flush(); log.setDate(date); // non so perchè ma non cambiare l'ordine della persist e della merge, altrimenti i dati // su db saranno corrotti!!! BOOO log.setRequest(request); log.setResponse(response); em.merge(log); em.flush();