I use Hibernate and MySql, and today I set the composite primary key in one of my tables, so below:
DefSelfLearning

And this object is OneToMany with SelfLearning:

This is my java object:
@Entity @Table(name = "defselflearning", catalog = "ats") public class DefSelfLearning implements java.io.Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private DefSelfLearningKeys defSelfLearningKeys; private Ecu ecu; private String excelColumn; @JsonIgnore private Set<SelfLearning> selfLearnings = new HashSet<SelfLearning>(0); public DefSelfLearning() { } public DefSelfLearning(DefSelfLearningKeys defSelfLearningKeys, Ecu ecu) { this.defSelfLearningKeys = defSelfLearningKeys; this.ecu = ecu; } public DefSelfLearning(Ecu ecu, DefSelfLearningKeys defSelfLearningKeys, String excelColumn, Set<SelfLearning> selfLearnings) { this.ecu = ecu; this.defSelfLearningKeys = defSelfLearningKeys; this.excelColumn = excelColumn; this.selfLearnings = selfLearnings; } @Id public DefSelfLearningKeys getDefSelfLearningKeys() { return this.defSelfLearningKeys; } public void setDefSelfLearningKeys(DefSelfLearningKeys defSelfLearningKeys) { this.defSelfLearningKeys = defSelfLearningKeys; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id_ecu", nullable = false) public Ecu getEcu() { return this.ecu; } public void setEcu(Ecu ecu) { this.ecu = ecu; } @Column(name = "excelColumn", length = 2) public String getExcelColumn() { return this.excelColumn; } public void setExcelColumn(String excelColumn) { this.excelColumn = excelColumn; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "defSelfLearning") public Set<SelfLearning> getSelfLearnings() { return this.selfLearnings; } public void setSelfLearnings(Set<SelfLearning> selfLearnings) { this.selfLearnings = selfLearnings; } }
class for composite key:
@Embeddable public class DefSelfLearningKeys implements Serializable { private static final long serialVersionUID = 1L; protected String parName; protected String description; protected String note; public DefSelfLearningKeys() {} public DefSelfLearningKeys(String parName, String description, String note) { this.parName = parName; this.description = description; this.note = note; } @Column(name = "parName", nullable = false, length = 15) public String getParName() { return this.parName; } public void setParName(String parName) { this.parName = parName; } @Column(name = "description", nullable = false, length = 100) public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } @Column(name = "note", nullable = false, length = 100) public String getNote() { return this.note; } public void setNote(String note) { this.note = note; } }
and SelfLearning class:
@Entity @Table(name = "selflearning", catalog = "ats") public class SelfLearning implements java.io.Serializable { private static final long serialVersionUID = 1L; private int idSelfLearning; private Acquisition acquisition; private DefSelfLearning defSelfLearning; private String value; public SelfLearning() { } public SelfLearning(int idSelfLearning, Acquisition acquisition, DefSelfLearning defSelfLearning) { this.idSelfLearning = idSelfLearning; this.acquisition = acquisition; this.defSelfLearning = defSelfLearning; } public SelfLearning(int idSelfLearning, Acquisition acquisition, DefSelfLearning defSelfLearning, String value) { this.idSelfLearning = idSelfLearning; this.acquisition = acquisition; this.defSelfLearning = defSelfLearning; this.value = value; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id_selfLearning", unique = true, nullable = false) public int getIdSelfLearning() { return this.idSelfLearning; } public void setIdSelfLearning(int idSelfLearning) { this.idSelfLearning = idSelfLearning; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id_acquisition", nullable = false) public Acquisition getAcquisition() { return this.acquisition; } public void setAcquisition(Acquisition acquisition) { this.acquisition = acquisition; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "id_parName", nullable = false), @JoinColumn(name = "id_description", nullable = false), @JoinColumn(name = "id_note", nullable = false) }) public DefSelfLearning getDefSelfLearning() { return this.defSelfLearning; } public void setDefSelfLearning(DefSelfLearning defSelfLearning) { this.defSelfLearning = defSelfLearning; } @Column(name = "value") public String getValue() { return this.value; } public void setValue(String value) { this.value = value; } }
but when I create defSelfLearning everything works fine, but when I create selfLearning, I get a MysqlDataTruncation exception:
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'id_parName' at row 1
This error is enough to check, but I did not find where the problem is, this is the code for creating SelfLearning:
for (DefSelfLearning defSelfLearning:defSelfLearningList){ SelfLearning selfLearning=new SelfLearning(); String key = defSelfLearning.getExcelColumn()+index; String value = actualRowValues.get(key); selfLearning.setAcquisition(findByCarAndExcelRow(carServices.findById(acquisitionForm.getCar()), index)); selfLearning.setDefSelfLearning(defSelfLearning); selfLearning.setValue(value); System.out.println(selfLearning.getDefSelfLearning().getDefSelfLearningKeys().getParName()); selfLearningServices.create(selfLearning); }
Do you find where the problem is? thanks
This is the first line of defSelfLearning and it is where the code failure

if I install manually, this works:

This is the java debugging screen of the first code that fails:
