当hibernate必须是表的主键时,如何使用休眠生成自定义ID

这是我的pojo课

@Entity

public class Department {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name="Department_Id")

private Integer deptId;

@Column(name="Department_Name",unique=true,nullable=false)

private String deptName;

@Column(name="Department_Description")

@NotNull

private String deptDesc;

//geters and setters

我想要的是department_id必须是此Department表的主键,并且该键的条目必须为DEP0001,DEP0002,DEP0003

回答:

谢谢大家的回答……最后,我在Department类中做了一些更改,并使用了一个类来生成IDs ....这是我的代码

@Entity

public class Department {

@Id

@GenericGenerator(name = "sequence_dep_id", strategy = "com.xyz.ids.DepartmentIdGenerator")

@GeneratedValue(generator = "sequence_dep_id")

@Column(name="Department_Id")

private String deptId;

@Column(name="Department_Name",unique=true,nullable=false)

private String deptName;

@Column(name="Department_Description")

@NotNull

private String deptDesc;

//getters and setters

DepartmentIdGenerator.java

package com.xyz.ids;

import java.io.Serializable;

import java.sql.*;

import org.hibernate.HibernateException;

import org.hibernate.engine.spi.SessionImplementor;

import org.hibernate.id.IdentifierGenerator;

public class DepartmentIdGenerator implements IdentifierGenerator{

@Override

public Serializable generate(SessionImplementor session, Object object)

throws HibernateException {

String prefix = "DEP";

Connection connection = session.connection();

try {

Statement statement=connection.createStatement();

ResultSet rs=statement.executeQuery("select count(Department_Id) as Id from demo.Department");

if(rs.next())

{

int id=rs.getInt(1)+101;

String generatedId = prefix + new Integer(id).toString();

System.out.println("Generated Id: " + generatedId);

return generatedId;

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

}

以上是 当hibernate必须是表的主键时,如何使用休眠生成自定义ID 的全部内容, 来源链接: utcz.com/qa/405964.html

回到顶部