gpt4 book ai didi

java - 复合主键和数据截断错误

转载 作者:可可西里 更新时间:2023-11-01 07:09:35 26 4
gpt4 key购买 nike

我正在使用 Hibernate 和 MySql,今天我在我的一个表中设置了一个复合主键,如下所示:

DefSelfLearning

DefSelfLearning

这个实体是 OneToMany with SelfLearning:

enter image description here

这是我的java实体:

@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;
}

}

复合键的类:

    @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;
}
}

和自学类:

@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;
}
}

但是当我创建一个 defSelfLearning 时一切正常,但是当我创建一个 SelfLearning 时我收到 MysqlDataTruncation 异常:

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'id_parName' at row 1

这个错误已经足够解释了,但我没有找到问题出在哪里,这是自学创建的代码:

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);

}

你找到问题出在哪里了吗?谢谢

这是 defSelfLearning 的第一行,也是代码失败的地方

enter image description here

如果我手动设置它会起作用:

enter image description here

这是第一个代码的 java 调试屏幕,失败了:

enter image description here

最佳答案

您尝试在“id_parName”列中插入一个长度超过 15 的字符

关于java - 复合主键和数据截断错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com