简体   繁体   English

如何在hibernate中生成字符串id就好了?

[英]How to generate string id in hibernate like long?

How to generate string id like hibernate long like this: 如何生成像hibernate这样的字符串id:

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


@Id
private String id

I mean, I want to get String values like "1", "2", "3", etc.. 我的意思是,我想得到像“1”,“2”,“3”等字符串值。

@GeneratedValue(strategy = GenerationType.IDENTITY) cannot be used with String type. @GeneratedValue(strategy = GenerationType.IDENTITY)不能与String类型一起使用。 So, if you want to use String as ID, you have to assign it manually. 因此,如果要将String用作ID,则必须手动分配。

A possible solution is to have custom id generator: 可能的解决方案是使用自定义ID生成器:

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

Id Generator class: Id Generator类:

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;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM