首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >springboot创建无序列数据

springboot创建无序列数据
EN

Stack Overflow用户
提问于 2020-05-21 17:37:24
回答 1查看 230关注 0票数 0
代码语言:javascript
运行
复制
jdk1.8.0_202.jdk
psql -V 12.1

创建和保存postgresql对象时出现问题。尝试创建对象时,对象的id值为空。我也不知道原因。请告诉我要托运的东西。

代码语言:javascript
运行
复制
package com.interpark.lab.tour.geolocation.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.locationtech.jts.geom.Geometry;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;

@Data
@Entity
@Table(name = "expedia_region_union")
@JsonInclude(JsonInclude.Include.NON_NULL)
@TypeDefs({
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public class ExpediaRegionUnion {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column( columnDefinition = "uuid", updatable = false )
    private String regionId;

    @Column(columnDefinition = "region_type")
    private String regionType;

    @Column(columnDefinition = "region_name")
    private String regionName;

    @Column(columnDefinition = "region_name_full")
    private String regionNameFull;

    @Transient
    private String regionDescriptor;

    @Column(columnDefinition = "country_code")
    private String countryCode;

    @Column(columnDefinition = "coordinates")
    private String coordinates;

    @Column(columnDefinition = "center_longitude")
    private String centerLongitude;

    @Column(columnDefinition = "center_latitude")
    private String centerLatitude;

    @Type(type = "jsonb")
    @Column(columnDefinition = "continent")
    private HashMap continent;

    @Type(type = "jsonb")
    @Column(columnDefinition = "add_continent")
    private List addContinent;

    @Column(columnDefinition = "ancestors")
    private String ancestors;

    @Column(columnDefinition = "descendants")
    private String descendants;

    @Column(columnDefinition = "region_name_kr")
    private String regionNameKr;

    @Column(columnDefinition = "region_name_full_kr")
    private String regionNameFullKr;

    @Transient
    @Column(columnDefinition = "parent_city_flag")
    private String parentCityFlag;

    @Transient
    @Column(columnDefinition = "parent_city")
    private String parentCity;

    @Transient
    @Column(columnDefinition = "boundaries")
    private Geometry boundaries;

    @Type(type = "jsonb")
    @Column(name = "country")
    private HashMap country;

    @Column(columnDefinition = "city_ancestors")
    private String cityAncestors;

    @Type(type = "jsonb")
    @Column(columnDefinition = "ancestors_info")
    private List ancestorsInfo;

    @Column(columnDefinition = "synonym")
    private String synonym;

    @Column(columnDefinition = "coordinates_nearby")
    private String coordinatesNearby;

    @Column(columnDefinition = "coordinates_nearby_auto")
    private String coordinatesNearbyAuto;

    @Type(type = "jsonb")
    @Column(columnDefinition = "nearest_airport")
    private HashMap nearestAirport;

    @Type(type = "jsonb")
    @Column(columnDefinition = "nearest_airport_in_country")
    private HashMap nearestAirportInCountry;

    @Type(type = "jsonb")
    @Column(columnDefinition = "codes")
    private HashMap codes;

    @Type(type = "jsonb")
    @Column(columnDefinition = "airport")
    private List airport;

    @Transient
    private String countryCodeLower;

    @Transient
    @Type(type = "boolean")
    @Column(columnDefinition = "display")
    private Boolean display;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonn")
    private HashMap jsonn;

    @Column(name = "jsonn_updated", columnDefinition = "BOOLEAN")
    private Boolean jsonnUpdated;

    @Column(name = "in_use", columnDefinition = "BOOLEAN")
    private Boolean inUse;

    @Column(name = "source_time")
    private String sourceTime;

    @Column(name = "city_home_flag")
    private String cityHomeFlag;

    @Column(columnDefinition = "source_from")
    private String sourceFrom;

    @Column(columnDefinition = "region_code")
    private String regionCode;

    @Column(columnDefinition = "sub_class")
    private String subClass;

    @Transient
    private boolean selected;

}

我不知道为什么,但是,像这样,当插入时,region_id值是空的。

代码语言:javascript
运行
复制
Hibernate: insert into expedia_region_union (add_continent, airport, ancestors, ancestors_info, center_latitude, center_longitude, city_ancestors, city_home_flag, codes, continent, coordinates, coordinates_nearby, coordinates_nearby_auto, country, country_code, descendants, in_use, jsonn, jsonn_updated, nearest_airport, nearest_airport_in_country, region_code, region_name, region_name_full, region_name_full_kr, region_name_kr, region_type, source_from, source_time, sub_class, synonym) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

我不明白的是,正如你在下面看到的,它是像其他东西一样制造和放置的。

代码语言:javascript
运行
复制
public void save(Map paramBean) throws JsonProcessingException {
        ExpediaRegionUnion insert = new ExpediaRegionUnion();
        insert.setRegionId("INTERPARK" + System.currentTimeMillis());
        insert.setRegionType(paramBean.get("regionType") + "");
        insert.setRegionName(paramBean.get("regionName") + "");

不使用自动增量就不能创建对象吗?因为我以为我不需要序列。如果我错了,请告诉我。

代码语言:javascript
运行
复制
Hibernate: select currval('expedia_region_union_region_id_seq')
SQL Error: 0, SQLState: 42P01
오류: "expedia_region_union_region_id_seq" 이름의 릴레이션(relation)이 없습니다

为什么hibernate想要我根本不需要的序列?

EN

回答 1

Stack Overflow用户

发布于 2020-05-22 13:47:36

我使用GenerationType.IDENTITY将主键生成委托给数据库。但我不该这么做。,因为我的表中已经创建的数据不是自动递增的数字ids。它们是基于Openstreetmap的本地id的。我为这样的人写答案。

正如@Olivier Depriester所说,使用GenerationType.AUTO效果很好。我关注了这篇文章。

https://vladmihalcea.com/uuid-identifier-jpa-hibernate/

这就是我如何通过springboot中的类直接创建uuid,而无需在数据库中创建pk。

  1. 在psql中,您可以输入以下内容。

代码语言:javascript
运行
复制
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

该扩展使您成为uuid生成器。

  1. ,你只需要复制这个。将文件放在适当的目录中。

代码语言:javascript
运行
复制
public class PostgreSQLUUIDGenerationStrategy
    implements UUIDGenerationStrategy {

    @Override
    public int getGeneratedVersion() {
        return 4;
    }

    @Override
    public UUID generateUUID(
            SharedSessionContractImplementor session) {
        return ((Session) session).doReturningWork(connection -> {
            try(
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery(
                    "select uuid_generate_v4()"
                )
            ) {
                while (resultSet.next()) {
                    return (UUID) resultSet.getObject(1);
                }
            }
            throw new IllegalArgumentException("Can't fetch a new UUID");
        });
    }
}

在实体类中,您可以更改configuration.

代码语言:javascript
运行
复制
    @Id
    @GeneratedValue(
            strategy = GenerationType.AUTO,
            generator = "pg-uuid"
    )
    @GenericGenerator(
            name = "pg-uuid",
            strategy = "uuid2",
            parameters = @org.hibernate.annotations.Parameter(
                    name = "uuid_gen_strategy_class",
                    value = "whatever.your.package.PostgresQLUUIDGenerationUtils"
            )
    )
    private String regionId;

这是我的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61931524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档