【问题标题】:How do I write schema sql for H2 for the presented entities?如何为呈现的实体为 H2 编写模式 sql?
【发布时间】:2021-09-26 09:19:28
【问题描述】:

我想使用 H2 运行一个内部数据库。我有一个附有 cmets 的新闻。如果数据库是在 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 spring spring-boot spring-data-jpa h2


    【解决方案1】:

    关系数据库支持一般的 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
    );
    

    【讨论】:

      【解决方案2】:

      尝试以下任一步骤

      1.H2 的一些语法不同。您可以相应地修改现有的创建查询或尝试在 PostgreSQL 兼容模式 下运行here

      2.Enable create in property 并启用 SQL 查询在应用程序启动时打印在日志中。它将打印创建查询。

      spring.jpa.show-sql=true
      spring.jpa.hibernate.ddl-auto=create
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        相关资源
        最近更新 更多