我想使用注释指定以下hbm配置:
<id name="somePK" column=""somePK"" type="long">
<generator class="com.db.hibernate.KeyGenerator"/>
</id>
Run Code Online (Sandbox Code Playgroud)
我不知道如何提供类名
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
Run Code Online (Sandbox Code Playgroud)
我是否必须@javax.persistence.SequenceGenerator在每个实体类中指定?
我可以只在@GeneratedValue注释下指定类名吗?
Jig*_*ekh 20
请找到我在项目中使用的以下代码集.
@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)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
小智 13
请参考custom-id-generator-in-hibernate这可能会对你有帮助.在这个例子中,我通过从名为pk_table的主键表中取MAX号来创建序列号.
员工类如下所示.
@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.
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们已经实现了接口IdentifierGenerator来覆盖函数generate(SessionImplementor session,Object object).来自hibernate_tutorial.pk_table的语句SELECT MAX(vlaue) 将从表pk_table中获取MAX编号.然后我们在MAX号前加上字符串" EMP ".
输出如下:
EMP1 | 2014-08-22 | 111 | 妮娜| 迈耶斯
| 归档时间: |
|
| 查看次数: |
39517 次 |
| 最近记录: |