我有几个实体使用带有Hibernate
和postgres
的AUTO
密钥生成策略。
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
这将导致生成一个< code>hibernate_sequence,每个实体在分配键时都将使用该序列。
现在我有一个表,其中包含大量缓存数据(如 100k 个条目)和一些用户表。由于两者都使用策略 AUTO,
因此它们都从相同的Hibernate序列中获取密钥。因此,即使我只有 10 个用户,他们都会有一个 6-7 位长的 ID,就像 123123 一样
。
我想知道,一般来说,是否应该为每个表引入自定义序列?或者我不应该那么关心身份证一代吗?
尝试使用序列
首先在 postgres
中创建序列
CREATE SEQUENCE YOUR_ENTITY_SEQ;
在实体中,使用生成策略作为SEQUENCE
,并根据需要为下一次生成值分配设置allocationSize
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "YOUR_ENTITY_SEQ")
@SequenceGenerator(name = "YOUR_ENTITY_SEQ", sequenceName = "YOUR_ENTITY_SEQ", allocationSize = 1)
private Long id;
您可以为useid使用串行数据类型,也可以使用PostgreSQL序列。如:
digoal=# create table tt(id serial, info text);
CREATE TABLE
digoal=# insert into tt (info) values ('test'),('test');
INSERT 0 2
digoal=# select * from tt;
id | info
----+------
1 | test
2 | test
(2 rows)
运筹学
digoal=# create table tt1(id int, info text);
CREATE TABLE
digoal=# create sequence seq_tt1;
CREATE SEQUENCE
digoal=# alter table tt1 alter column id set default nextval('seq_tt1'::regclass);
ALTER TABLE
digoal=# insert into tt1 (info) values ('test'),('test');
INSERT 0 2
digoal=# select * from tt1;
id | info
----+------
1 | test
2 | test
(2 rows)
我最近为我的项目解决了这个问题。我使用增强序列生成器(这是序列样式生成器的默认设置),并将preferr_sequence_per_entity
参数设置为true
。
我的包裹信息内容.java
:
@GenericGenerator(
name = "optimized-sequence",
strategy = "enhanced-sequence",
parameters = {
@Parameter(name="prefer_sequence_per_entity", value="true"),
@Parameter(name="optimizer", value="hilo"),
@Parameter(name="increment_size", value="50")})
package org.example.model;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
在使用方面,您只需要
@Id @GeneratedValue(generator="optimized-sequence")
public long id;
我更喜欢有单独的序列,因为偶尔我会删除一个表并重新创建它,我希望ID从1开始。
问题内容: 我有几个实体在和中使用密钥生成策略。 这将导致生成一个,并且每个实体在分配键时都将使用该序列。 现在,我有一个包含大量缓存数据(如100k条目)的表和一些用户表。由于两者都使用策略,因此它们都从相同的hibernate序列中获取密钥。结果,即使我只有10个用户,他们的ID也会全部由6到7位数字组成,例如。 我不知道一般而言是否应该为每个表引入自定义序列?还是我不应该那么在乎id的生成?
我有一个问题,“列表中的每个孩子都应该在我的应用程序中有一个唯一的“键”道具”错误。我可以打印表格,但我不知道为什么它给我这个错误,因为我提供了一个唯一的ID列表中的每个项目。 我也尝试过向我的表头添加一个键属性,但这并不能修复错误。 如有任何意见,将不胜感激 客户组件 表组件
所以我想渲染数组,但它一直在说,警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键,我的数组包含三个元素,它甚至没有正确渲染第三个数组,按钮没有甚至因为某种原因第三李的工作。 更新:我从firebase获得的数据如下所示: 此代码将选择每个数据的标题 当我将鼠标悬停在“fikka-fikka”上时,“fikka-fikka”的按钮甚至不起作用。在ed sheeran和一个方向上,
在这个简单的React应用程序中,我不明白为什么我会收到以下警告信息: 警告:列表中的每个孩子都应该有一个唯一的“键”道具。 对我来说,似乎我把密钥放在了正确的位置,形式为key={item.login.uuid} 我怎样才能摆脱警告信息?把钥匙放在哪里合适? 应用程序。js 列表js
我对如何创建一个简单的todo应用程序的反应和探索方式还不熟悉。我当前收到错误“警告:列表中的每个孩子都应该有一个唯一的“键”道具。”一切似乎都很好,但我一定是做错了什么。 如果有人能帮上忙,那就br太好了/解释为什么会发生这个错误,那就太好了。
问题内容: 我正在使用Google Books API构建应用,并且似乎正在向列表中的每个孩子传递唯一键,但是错误不会消失。我一定在做错事,但不确定。 请注意,在返回const books之后,我有一个console.log(book.id),它将在控制台中显示所有10个唯一的id键。但是,当我尝试使用key = {book.id}将其传递给该组件的子组件时,会出现此错误。 问题答案: 在需要去最
我是新手,我正在编写一个包含卡片的应用程序平面列表,但我发现这个错误,这是我的代码 但是我得到警告:列表中的每个孩子都应该有一个独特的“钥匙”道具。有关更多信息,请参见https://fb. me/react-warge-key。%s, 我做错了什么?
我正在使用GoogleBooksAPI构建一个应用程序,我似乎正在向列表中的每个孩子传递一个唯一的密钥,但错误不会消失。我一定是做错了什么,但我不知道是什么。 注意,在const books中返回后,我有一个控制台。日志(book.id),它将在控制台中显示所有10个唯一的id键。但是当我试图使用key={book.id}将它传递给这个组件的子组件时,我得到了这个错误。