如何为所呈现实体的 H2 编写架构 sql?
How do I write schema sql for H2 for the presented entities?
我想 运行 使用 H2 的内部数据库。我有一条新闻附有评论。如果数据库是在 PostgreSQL 中自动创建的,这一切都有效。
我的实体:
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "date")
private Date date;
@Column(name = "text")
private String text;
@Column(name = "username")
private String username;
@Column(name = "id_news")
private long id_news;
}
public class News {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "date")
private Date date;
@Column(name = "title")
private String title;
@Column(name = "text")
private String text;
@OneToMany(cascade = CascadeType.ALL, targetEntity = Comment.class)
@JoinColumn(name = "id_news")
private List<Comment> comments;
}
我试图从 postgresql 获取 sql 代码,但它给出了一个错误
CREATE TABLE public.news
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
date timestamp without time zone,
text character varying(255) COLLATE pg_catalog."default",
title character varying(255) COLLATE pg_catalog."default",
CONSTRAINT news_pkey PRIMARY KEY (id)
);
CREATE TABLE public.comment
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
date timestamp without time zone,
id_news bigint,
text character varying(255) COLLATE pg_catalog."default",
username character varying(255) COLLATE pg_catalog."default",
CONSTRAINT comment_pkey PRIMARY KEY (id),
CONSTRAINT fkbptqmm7bn3alb6htitgfrlt95 FOREIGN KEY (id_news)
REFERENCES public.news (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
我收到这个错误
Syntax error in SQL statement "CREATE TABLE PUBLIC.NEWS ( ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ), DATE TIMESTAMP WITHOUT TIME ZONE, TEXT CHARACTER VARYING(255) COLLATE[*] PG_CATALOG.""default"", TITLE CHARACTER VARYING(255) COLLATE PG_CATALOG.""default"", CONSTRAINT NEWS_PKEY PRIMARY KEY (ID) )"; expected "FOR, UNSIGNED, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, BIGSERIAL, SERIAL, IDENTITY, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, COMMENT, CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE public.news ( id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ), date timestamp without time zone, text character varying(255) COLLATE pg_catalog."default", title character varying(255) COLLATE pg_catalog."default", CONSTRAINT news_pkey PRIMARY KEY (id) ) [42001-200]
我有 Postgresql 方言,
关系数据库支持一般的 SQL 语句,但它们还为其添加了额外的扩展。您在 PostgreSQL 中看到的扩展在 H2 中不起作用。
话虽如此,您的 DDL 将在 H2 中进行少量修改。例如:
create table news (
id bigint not null generated by default as identity,
date timestamp without time zone,
text character varying(255),
title character varying(255),
constraint news_pkey primary key (id)
);
create table comment (
id bigint not null generated by default as identity,
date timestamp without time zone,
id_news bigint,
text character varying(255),
username character varying(255),
constraint comment_pkey primary key (id),
constraint fkbptqmm7bn3alb6htitgfrlt95 foreign key (id_news)
references news (id)
on update no action
on delete no action
);
尝试以下任一步骤
1.Some H2 的语法不同。您可以相应地修改现有的创建查询或在 PostgreSQL 兼容模式 中尝试 运行 给定 here
2.Enable 在 属性 中创建并启用 SQL 查询以在应用程序启动时在日志中打印。它将打印创建查询。
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
我想 运行 使用 H2 的内部数据库。我有一条新闻附有评论。如果数据库是在 PostgreSQL 中自动创建的,这一切都有效。
我的实体:
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "date")
private Date date;
@Column(name = "text")
private String text;
@Column(name = "username")
private String username;
@Column(name = "id_news")
private long id_news;
}
public class News {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "date")
private Date date;
@Column(name = "title")
private String title;
@Column(name = "text")
private String text;
@OneToMany(cascade = CascadeType.ALL, targetEntity = Comment.class)
@JoinColumn(name = "id_news")
private List<Comment> comments;
}
我试图从 postgresql 获取 sql 代码,但它给出了一个错误
CREATE TABLE public.news
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
date timestamp without time zone,
text character varying(255) COLLATE pg_catalog."default",
title character varying(255) COLLATE pg_catalog."default",
CONSTRAINT news_pkey PRIMARY KEY (id)
);
CREATE TABLE public.comment
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
date timestamp without time zone,
id_news bigint,
text character varying(255) COLLATE pg_catalog."default",
username character varying(255) COLLATE pg_catalog."default",
CONSTRAINT comment_pkey PRIMARY KEY (id),
CONSTRAINT fkbptqmm7bn3alb6htitgfrlt95 FOREIGN KEY (id_news)
REFERENCES public.news (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
我收到这个错误
Syntax error in SQL statement "CREATE TABLE PUBLIC.NEWS ( ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ), DATE TIMESTAMP WITHOUT TIME ZONE, TEXT CHARACTER VARYING(255) COLLATE[*] PG_CATALOG.""default"", TITLE CHARACTER VARYING(255) COLLATE PG_CATALOG.""default"", CONSTRAINT NEWS_PKEY PRIMARY KEY (ID) )"; expected "FOR, UNSIGNED, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, BIGSERIAL, SERIAL, IDENTITY, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, COMMENT, CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE public.news ( id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ), date timestamp without time zone, text character varying(255) COLLATE pg_catalog."default", title character varying(255) COLLATE pg_catalog."default", CONSTRAINT news_pkey PRIMARY KEY (id) ) [42001-200]
我有 Postgresql 方言,
关系数据库支持一般的 SQL 语句,但它们还为其添加了额外的扩展。您在 PostgreSQL 中看到的扩展在 H2 中不起作用。
话虽如此,您的 DDL 将在 H2 中进行少量修改。例如:
create table news (
id bigint not null generated by default as identity,
date timestamp without time zone,
text character varying(255),
title character varying(255),
constraint news_pkey primary key (id)
);
create table comment (
id bigint not null generated by default as identity,
date timestamp without time zone,
id_news bigint,
text character varying(255),
username character varying(255),
constraint comment_pkey primary key (id),
constraint fkbptqmm7bn3alb6htitgfrlt95 foreign key (id_news)
references news (id)
on update no action
on delete no action
);
尝试以下任一步骤
1.Some H2 的语法不同。您可以相应地修改现有的创建查询或在 PostgreSQL 兼容模式 中尝试 运行 给定 here
2.Enable 在 属性 中创建并启用 SQL 查询以在应用程序启动时在日志中打印。它将打印创建查询。
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create