我无法在 Cuba 平台上应用更新查询脚本
Failing me to apply update query scripts in Cuba Platform
我在应用此更新数据库脚本时收到此错误。
default expression needed in statement [alter table WATERSCHEME_LOCATION add column LGA_ID integer not null ]
LGA_ID 是与位置 Table 相关联的列,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;"""
这是我的位置table
/*
* 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;
}
}
有人可以帮助我为什么要设置默认值吗?
大概table你换的不是空的吧? BTW,用的是哪个数据库?
您不能只向已经包含一些数据的 table 添加一个非空列。
通常的实现步骤:
1) 添加可为空的列
2) 更新 table 中的所有现有行,以便它们接收到一些值。
3) 执行"alter table alter column set not null" 将列设置为非空。
另一种方法是修改您的更新脚本。如果您使用的是 CUBA Studio,那么请转到 Entity 面板并按下 Generate DB scripts,如下图所示:
然后你会看到所有的数据库脚本。找到合适的纸条
alter table WATERSCHEME_LOCATION add column LGA_ID integer not null
声明并添加
DEFAULT {DEFAULT_VALUE}
子句,您可以在其中指定在更改空值时应设置的 Location 实体的 id
。现在您可以更新您的数据库了!
P.S。请注意,如果您在另一个数据库上 运行 此脚本可能会导致 FOREIGN KEY constraint exception
,因为默认 id
的 Location
不存在。为避免这种情况,您可以向同一个更新脚本添加另一个语句,这样如果数据库中不存在默认位置,则使用指定的 id
.
插入它
我在应用此更新数据库脚本时收到此错误。
default expression needed in statement [alter table WATERSCHEME_LOCATION add column LGA_ID integer not null ]
LGA_ID 是与位置 Table 相关联的列,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;"""
这是我的位置table
/*
* 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;
}
}
有人可以帮助我为什么要设置默认值吗?
大概table你换的不是空的吧? BTW,用的是哪个数据库?
您不能只向已经包含一些数据的 table 添加一个非空列。
通常的实现步骤:
1) 添加可为空的列
2) 更新 table 中的所有现有行,以便它们接收到一些值。
3) 执行"alter table alter column set not null" 将列设置为非空。
另一种方法是修改您的更新脚本。如果您使用的是 CUBA Studio,那么请转到 Entity 面板并按下 Generate DB scripts,如下图所示:
然后你会看到所有的数据库脚本。找到合适的纸条
alter table WATERSCHEME_LOCATION add column LGA_ID integer not null
声明并添加
DEFAULT {DEFAULT_VALUE}
子句,您可以在其中指定在更改空值时应设置的 Location 实体的 id
。现在您可以更新您的数据库了!
P.S。请注意,如果您在另一个数据库上 运行 此脚本可能会导致 FOREIGN KEY constraint exception
,因为默认 id
的 Location
不存在。为避免这种情况,您可以向同一个更新脚本添加另一个语句,这样如果数据库中不存在默认位置,则使用指定的 id
.