问题描述
我对Java很陌生,需要一些帮助。我已经使用OpenXava创建了一个@MappedSuperclass“参与者”。
null
然后我将其扩展为另外两个类“ Staff”和“ Participant”。
import javax.persistence.*;
import org.hibernate.annotations.*;
import org.openxava.annotations.*;
@MappedSuperclass
public class Attendees {
@Id @Hidden @Column(length = 3)
@GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid",strategy="uuid")
private String oid;
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
}
和
import javax.persistence.*;
@Entity
public class Staff extends Attendees{
@Column (length = 50)
private String fullName;
@Column (length = 2)
private int age;
@Column (length = 10)
private int contactNum;
@Embedded
private Address address;
@Embedded
private MedicalInformation medicalInfo;
...
}
下面是两个@Embedded元素的代码:
地址:
import javax.persistence.*;
@Entity
public class Participants extends Attendees{
@Column (length = 50)
private String fullName;
@Column (length = 2)
private int age;
@Column (length = 10)
private int contactNum;
@Embedded
private Address address;
@Embedded
private MedicalInformation medicalInfo;
...
}
和
医学信息:
import javax.persistence.*;
@Embeddable
public class Address {
@Column(length = 100)
private String street;
@Column(length = 100)
private String suburb;
@Column(length = 100)
private String city;
@Column(length = 100)
private String province;
@Column(length = 5)
private int areaCode;
...
}
除了Attendees类,我省略了所有getters()和setters()。
我以Java应用程序的形式运行该应用程序,直到我尝试输入并保存记录为止。当我单击“保存”时,系统提示:
import javax.persistence.*;
@Embeddable
public class MedicalInformation {
@Column (length = 3)
private String dailyMedication;
@Column (length = 300)
private String medicationDescription;
@Column (length = 300)
private String allergies;
@Column (length = 300)
private String dietRequirements;
@Column (length = 300)
private String additionalNotes;
...
}
在OpenXava的控制台中仔细检查后,我发现以下内容:
Impossible to execute Save action: org.hibernate.exception.DataException: could not execute statement
我在这里没有提到的应用程序中的其他实体,允许我保存新记录。但是,这些实体未与提供的代码链接或相关。
请帮助。
解决方法
错误已清除:
“ SQLDataException:数据异常:字符串数据,右截断;表:PARTICIPANTS列:OID”
问题出在表参与者的OID列中(您尝试插入的字符串由于某些原因而被截断了),并且可能与jamie所说的有关:
https://stackoverflow.com/a/53182256/13745944
,更改:
@Id @Hidden @Column(length = 3)
@GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid",strategy="uuid")
private String oid;
通过:
@Id @Hidden @Column(length = 32)
@GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid",strategy="uuid")
private String oid;
注意@Column(length = 32)而不是@Column(length = 3)。同样,您还必须删除表,以便OpenXava再次生成它们,如果它们已经有数据,只需执行ALTER TABLE来更改OID列的列长。