jdk1.8.0_202.jdk
psql -V 12.1
创建和保存postgresql对象时出现问题。尝试创建对象时,对象的id值为空。我也不知道原因。请告诉我要托运的东西。
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值是空的。
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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
我不明白的是,正如你在下面看到的,它是像其他东西一样制造和放置的。
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") + "");
不使用自动增量就不能创建对象吗?因为我以为我不需要序列。如果我错了,请告诉我。
Hibernate: select currval('expedia_region_union_region_id_seq')
SQL Error: 0, SQLState: 42P01
오류: "expedia_region_union_region_id_seq" 이름의 릴레이션(relation)이 없습니다
为什么hibernate想要我根本不需要的序列?
发布于 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。
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
该扩展使您成为uuid生成器。
,
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.
@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;
这是我的。
https://stackoverflow.com/questions/61931524
复制相似问题