仅使用 Spring 数据 JDBC 中的值列表的实体存在问题
Problem with an entity using just a list of values in Spring Data JDBC
我正在使用 Spring-Boot 2.5.0,Java 11,一个 Postgres 数据库和 Lombok。我有例如作为实体的文章列表:
@Data
@Builder
@AllArgsConstructor
public class Articles {
@Id
private Long id;
@Builder.Default
private List<Article> articles = new ArrayList<>();
}
和文章值:
@Data
@Builder
@AllArgsConstructor
public class Article {
private String name;
private Integer price;
}
和存储库:
@Repository
public interface ArticlesRepository extends CrudRepository<Articles, Long> {
}
数据库模式如下所示:
CREATE TABLE "articles" (
"id" BIGSERIAL NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE "article" (
"name" VARCHAR(255),
"price" INTEGER,
"articles" BIGINT,
"articles_key" INTEGER
);
并对其进行测试:
var article1 = Article.builder().name("T-Shirt").price(1635).build();
var article2 = Article.builder().name("Shoes").price(5670).build();
var articles = Articles.builder().articles(List.of(article1, article2)).build();
articlesRepository.save(articles);
会引发异常:
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO "articles" VALUES ()]; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
如果我只是向 Articles 添加一个字段,例如name 在这种情况下,它工作正常:
@Data
@Builder
@AllArgsConstructor
public class Articles {
@Id
private Long id;
private String name;
@Builder.Default
private List<Article> articles = new ArrayList<>();
}
这是某些数据库 Spring 数据 JDBC 的当前限制。
一些数据库要求插入至少有一列。
作为一种解决方法,您可以添加一个您实际不使用的虚拟列。或者,您无法自动生成 ID。
请考虑 creating an issue 以便最终解决此问题。
我正在使用 Spring-Boot 2.5.0,Java 11,一个 Postgres 数据库和 Lombok。我有例如作为实体的文章列表:
@Data
@Builder
@AllArgsConstructor
public class Articles {
@Id
private Long id;
@Builder.Default
private List<Article> articles = new ArrayList<>();
}
和文章值:
@Data
@Builder
@AllArgsConstructor
public class Article {
private String name;
private Integer price;
}
和存储库:
@Repository
public interface ArticlesRepository extends CrudRepository<Articles, Long> {
}
数据库模式如下所示:
CREATE TABLE "articles" (
"id" BIGSERIAL NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE "article" (
"name" VARCHAR(255),
"price" INTEGER,
"articles" BIGINT,
"articles_key" INTEGER
);
并对其进行测试:
var article1 = Article.builder().name("T-Shirt").price(1635).build();
var article2 = Article.builder().name("Shoes").price(5670).build();
var articles = Articles.builder().articles(List.of(article1, article2)).build();
articlesRepository.save(articles);
会引发异常:
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO "articles" VALUES ()]; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
如果我只是向 Articles 添加一个字段,例如name 在这种情况下,它工作正常:
@Data
@Builder
@AllArgsConstructor
public class Articles {
@Id
private Long id;
private String name;
@Builder.Default
private List<Article> articles = new ArrayList<>();
}
这是某些数据库 Spring 数据 JDBC 的当前限制。
一些数据库要求插入至少有一列。
作为一种解决方法,您可以添加一个您实际不使用的虚拟列。或者,您无法自动生成 ID。
请考虑 creating an issue 以便最终解决此问题。