使用OpenXava是否“无法执行保存操作:org.hibernate.exception.DataException:无法执行语句”?

问题描述

我对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列的列长。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...