gpt4 book ai didi

java - @TableGenerator 可以保存表中最后使用的 id 而不是下一个可用的 id 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:22 26 4
gpt4 key购买 nike

我需要连接到供应商数据库并插入客户数据。用于生成新客户 ID 的序列表存储最后使用的 ID(不是下一个可用的)。我在 jpa 或 hibernate 文档中找不到任何指示告诉 hibernate 将 seq 表中的 id 视为上次使用而不是下一个可用的方法的方法(使用@TableGenerator 时)。

我是否需要编写一个行为与@TableGenerator 基本相同的自定义生成器,唯一的区别是处理序列表中的值的方式?

我的客户实体定义如下:

@Entity
public class Customer {

@Id
@TableGenerator(name = "cust_gen", table = "SEQUENCE", pkColumnName = "target",
pkColumnValue = "customer", valueColumnName = "id", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "pat_gen")
public long getCustomer_id() {
return customer_id;
}

public void setCustomer_id(Long id) {
this.customer_id = id;
}

...

}

谢谢!

最佳答案

我遇到了同样的问题。以这种方式修复它:使用 Hibernate org.hibernate.annotations.GenericGenerator 而不是持久性 TableGenerator,如下所示:

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "name")
public class Name implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "names")
@GenericGenerator(name = "names", strategy = "com.ourpackage.SybaseTableGenerator", parameters = {
@Parameter(name = "table_name", value = "new_key_numbers"),
@Parameter(name = "value_column_name", value = "key_number"),
@Parameter(name = "segment_column_name", value = "name"),
@Parameter(name = "segment_value", value = "names_key") })
@Column(name = "names_id")
private Long id;

并创建您自己的生成器(我使用名称 com.ourpackage.SybaseTableGenerator):

import java.io.Serializable;

import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.enhanced.TableGenerator;

@SuppressWarnings("UnusedDeclaration")
public class SybaseTableGenerator extends TableGenerator {

@Override
public synchronized Serializable generate(SessionImplementor session, Object obj) {
return (Long) super.generate(session, obj) + 1;
}
}

有点棘手,但它有效;)

关于java - @TableGenerator 可以保存表中最后使用的 id 而不是下一个可用的 id 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6311131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com