Jpa 无法在Cuba平台中应用更新查询脚本

Jpa 无法在Cuba平台中应用更新查询脚本,jpa,cuba-platform,Jpa,Cuba Platform,应用此更新数据库脚本时收到此错误 default expression needed in statement [alter table WATERSCHEME_LOCATION add column LGA_ID integer not null ] LGA_ID是与位置表关联的列,LGA_ID设置为必填。但是,当我删除强制命令时,我可以更新脚本 @Table(name = "WATERSCHEME_SCHEME_C") @Entity(name = "waterscheme$Scheme_

应用此更新数据库脚本时收到此错误

default expression needed in statement [alter table WATERSCHEME_LOCATION add column LGA_ID integer not null ]
LGA_ID是与位置表关联的列,LGA_ID设置为必填。但是,当我删除强制命令时,我可以更新脚本

@Table(name = "WATERSCHEME_SCHEME_C")
@Entity(name = "waterscheme$Scheme_c")
public class Scheme_c extends BaseIntegerIdEntity {
private static final long serialVersionUID = -5886267876250540580L;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "LGA_NAME_ID")
protected Lga lgaName;"""
这是我的位置表

/*
 * Copyright (c) 2016 water-scheme
 */
package com.company.waterscheme.entity;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import com.haulmont.cuba.core.entity.BaseIntegerIdEntity;
import com.haulmont.chile.core.annotations.NamePattern;

/**
 * @author samuel.thampy
 */
@NamePattern("%s|locationName")
@Table(name = "WATERSCHEME_LOCATION")
@Entity(name = "waterscheme$Location")
public class Location extends BaseIntegerIdEntity {
    private static final long serialVersionUID = 8201565825728955033L;

    @Column(name = "LOCATION_NAME", nullable = false)
    protected String locationName;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "LGA_ID")
    protected Lga lgaId;

    public void setLocationName(String locationName) {
        this.locationName = locationName;
    }

    public String getLocationName() {
        return locationName;
    }

    public void setLgaId(Lga lgaId) {
        this.lgaId = lgaId;
    }

    public Lga getLgaId() {
        return lgaId;
    }
    }

有人能帮助我为什么要设置默认值吗?

可能您正在更改的表不是空的,是吗?顺便问一下,使用了哪个数据库

不能只将非空列添加到已包含某些数据的表中

通常如何实现的步骤:

1) 添加可为空的列

2) 更新表中的所有现有行,以便它们接收一些值


3) 执行“alter table alter column set not null”将列设置为非null。

另一种方法是修改更新脚本。如果使用CUBA Studio,请转到实体面板并按生成DB脚本,如下图所示:

然后您将看到所有数据库脚本。找到合适的有
alter table WATERSCHEME\u LOCATION add column LGA\u ID integer not null
声明和添加
DEFAULT{DEFAULT\u VALUE}
子句,其中可以指定在更改空值时应设置的位置实体的
id
。现在你可以更新你的数据库了


请注意,如果在另一个数据库上运行此脚本,可能会导致
外键约束异常
,因为具有默认
id的
位置
不存在。为了避免这种情况,您可以向同一个更新脚本中添加另一条语句,这样,如果数据库中不存在默认位置,则可以使用指定的
id

插入它。谢谢,HSQLDB就是数据库。我在使用我在使用LGA_ID作为必填项,我也通过删除Cuba Studio中的必填项并更新数据库来解决这个问题。