java - 如何在hibernate中生成像long这样的字符串id?

标签 java hibernate

如何像 hibernate long 这样生成字符串 id:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


@Id
private String id

我的意思是,我想获取“1”、“2”、“3”等字符串值。

最佳答案

@GenerateValue(strategy = GenerationType.IDENTITY) 不能与 String 类型一起使用。所以,如果你想使用String作为ID,你必须手动分配它。

一个可能的解决方案是使用自定义 ID 生成器:

@Id
@GenericGenerator(name = "sequence_id", strategy = "com.xyz.IdGenerator")
@GeneratedValue(generator = "sequence_id")  
@Column(name="Id")
private String Id;

Id 生成器类:

package com.xyz;

import java.io.Serializable;
import java.sql.*;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;

public class IdGenerator implements IdentifierGenerator{

    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {


        Connection connection = session.connection();

        try {
            Statement statement=connection.createStatement();

            ResultSet rs=statement.executeQuery("select count(Id) from dbo.TableName");

            if(rs.next())
            {
                int id=rs.getInt(1);
                return new Integer(id).toString();
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }

        return null;
    }

}

关于java - 如何在hibernate中生成像long这样的字符串id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56211382/

相关文章:

java - 字符串堆未正确插入

java - 单击 recyclerview 中的列表之一时如何关闭 Activity ?

java - 如何将带有子查询的 SQL 查询转换为 JPA 标准生成器

hibernate - 在 hibernate 中使用@NamedStoredProcedureQuery 时需要列定义列表消息

java - libgdx - ui SpriteBatch 需要根据窗口大小进行缩放?

java - 为什么我的 xpath 不起作用?

java - 如何用 url 的单斜杠替换双斜杠

java - Hibernate - 删除对象

java - Spring Inject注解导致空指针异常

Java + Spring + hibernate : Dao implementation that is about to change in the future