我想使用注释指定以下hbm配置:
<id name="somePK" column=""somePK"" type="long">
<generator class="com.db.hibernate.KeyGenerator"/>
</id>我不确定如何为类名提供
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")我必须在每个实体类中指定@javax.persistence.SequenceGenerator吗?
我可以在@GeneratedValue注解下只指定类名吗?
发布于 2012-07-24 21:39:35
请找到下面的代码集,我已经在项目中使用了相同的代码。
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator")
@GenericGenerator(name = "XyzIdGenerator",
strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator",
parameters = {
@Parameter(name = "sequence", value = "xyz_id_sequence")
})
public BigInteger getId()
{
return id;
}
package com.mycompany.myapp.id;
import org.hibernate.id.SequenceGenerator;
...
public class BigIntegerSequenceGenerator
extends SequenceGenerator
{
@Override
public Serializable generate(SessionImplementor session, Object obj)
{
...
}
}发布于 2014-08-22 11:01:20
请参考custom-id-generator-in-hibernate,这可能会对您有所帮助。在本例中,我通过从名为pk_table的主键表中获取最大编号来创建序列号。
Employee类如下所示。
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@GenericGenerator(name = "sequence_emp_id", strategy = "com.supportmycode.model.EmployeeIdGenerator")
@GeneratedValue(generator = "sequence_emp_id")
@Column(name="employee_id")
private String employeeId;
@Column(name="firstname")
private String firstname;
@Column(name="lastname")
private String lastname;
@Column(name="birth_date")
private Date birthDate;
@Column(name="cell_phone")
private String cellphone;
//Getter and Setter methods.
}EmployeeIdGenerator类如下所示
public class EmployeeIdGenerator implements IdentifierGenerator {
public Serializable generate(SessionImplementor session, Object object)
throws HibernateException {
String prefix = "EMP";
Connection connection = session.connection();
try {
PreparedStatement ps = connection
.prepareStatement("SELECT MAX(value) as value from hibernate_tutorial.pk_table");
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int id = rs.getInt("value");
String code = prefix + new Integer(id).toString();
System.out.println("Generated Stock Code: " + code);
return code;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}在这里,我们实现了覆盖函数generate(SessionImplementor session, Object object)的接口IdentifierGenerator。语句SELECT MAX(value) as value from hibernate_tutorial.pk_table将从表pk_table中获取最大数字。然后我们在最大号前面加上字符串"EMP“。
输出如下所示:
员工
------------------------------------------------------------
employee_id | birth_date | cell_phone | firstname | lastname
------------------------------------------------------------
EMP1 | 2014-08-22 | 111 | Nina | Mayershttps://stackoverflow.com/questions/11631800
复制相似问题