我無法填充 H2 In Memory 資料庫。這里的想法是讓 BuildingCode 作為主鍵和 id 是唯一的。
我收到以下類級別錯誤:
org.hibernate.tool.schema.spi.CommandAcceptanceException:通過 JDBC 陳述句執行 DDL “alter table property add column building_code varchar(255) not null”時出錯
引起:org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:NULL 不允許列“BUILDING_CODE”;SQL 陳述句:
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "Property")
public class Property {
@Id
@Column(name = "BuildingCode")
String id;
@Column(name = "Latitude")
Float latitude;
@Column(name = "Longitude")
Float longitude;
@Column(name = "BuildingName")
String buildingName;
@Column(name = "BuildAbr")
String buildAbr;
@Column(name = "Address")
String address;
@Column(name = "SquareFt")
Long squareFt;
@Column(name = "AssetId")
Long assetId;
public String getLatLong(){
return "[" this.getLatitude() "," this.getLongitude() "]";
}
}
表創建和樣本插入
CREATE TABLE Property(
Latitude NUMERIC(9,6) NOT NULL
,Longitude NUMERIC(10,6) NOT NULL
,BuildingCode VARCHAR(5) NOT NULL PRIMARY KEY
,BuildingName VARCHAR(42) NOT NULL
,BuildAbr VARCHAR(18) NOT NULL
,Address VARCHAR(42) NOT NULL
,SquareFt INTEGER
,AssetId INTEGER
);
INSERT INTO Property(Latitude,Longitude,BuildingCode,BuildingName,BuildAbr,Address,SquareFt,AssetId) VALUES (43.453696,-76.544895,'0006','Lanigan Hall','LANIGAN-6','some address',88200,1743);
這也是我的 application.properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url = jdbc:h2:mem:testdb:DB_CLOSE_ON_EXIT=FALSE
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.show_sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
uj5u.com熱心網友回復:
在物體類中,您已經在駝峰式案例中定義了列名,即 BuildingCode,
@Id
@Column(name = "BuildingCode")
private String id;
這將使 JPA 期望 DB 表中有一個名為 building_code 的列,如果找不到,它將創建名為 building_code 的列,其資料大小為 varchar(255) 和“NOT NULL”。
在您的插入查詢中,它具有 BuildingCode 列的值,但沒有新創建的 building_code 列的值,因此出現錯誤 -
**NULL not allowed for column "BUILDING_CODE"**
這同樣適用于其他駱駝套管柱,即。
BuildingName,
BuildAbr,
SquareFt,
AssetId
結論:如果您不希望 JPA 創建帶有下劃線的列,請不要在物體中以駝??峰形式提及列名。如果您更改列定義,您的代碼將起作用,如下所示:
@Id
@Column(name = "Buildingcode") //change camel case to title case
private String id;
但是,我建議在創建表和插入表腳本中簡單地更改列名,使其具有下劃線,如下所示:
create table property(
latitude NUMERIC(9,6) NOT NULL,
longitude NUMERIC(10,6) NOT NULL,
building_code VARCHAR(5) NOT NULL PRIMARY KEY,
building_name VARCHAR(42) NOT NULL,
build_abr VARCHAR(18) NOT NULL,
address VARCHAR(42) NOT NULL,
square_ft INTEGER,
asset_id INTEGER
);
insert into property
( latitude,
longitude,
building_code,
building_name,
build_abr,
address,
square_ft,
asset_id)
values (43.453696,
-76.544895,
'0006',
'Lanigan Hall',
'LANIGAN-6',
'some address',
88200,
1743);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/475957.html
