您可以实现可配置接口,并根据需要覆盖配置。这样,您只能将静态值作为参数传递给
CourierTransImpl类
如果要传递一些动态值,则可以
@Transient在实体中定义一个属性,然后在
CourierTransImpl类中访问该属性。
详细说明:
例如,让我们说有一个名为的实体
Employee,它有一个名为的瞬时属性,
empType然后您可以像这样定义该实体。
@Entitypublic class Employee { @Id @GeneratedValue(generator = "UniqueIdGenerator") @GenericGenerator(name = "UniqueIdGenerator", strategy = "com.CourierTransImpl", parameters = { @Parameter(name = "appendString", value = "Emp") }) private String id; private String name; @Transient private String empType; // Getters & Setters}在上面的代码中,您可以看到我们设置了参数
appendString,这是一个静态值,在此处将其设置为“ Emp”。
现在
CourierTransImpl,实现Configurable接口的类:
public class CourierTransImpl implements IdentifierGenerator, Configurable {private String appendString;@Overridepublic Serializable generate(SessionImplementor session, Object object) throws HibernateException { Connection connection = session.connection(); int id = 0; try { Employee emp = (Employee) object; id = ..; // your logic to get the id from database // Now you can use the parameter appendString which is static value set to "Emp" // You can also access any of the employee properties here, so in your pre you can set the required value dynamically. return appendString + emp.getEmpType()+id; } catch (Exception e) { e.printStackTrace(); } return appendString + id;}@Overridepublic void configure(Type type, Properties params, Dialect d) throws MappingException { setAppendString(params.getProperty("appendString")); // Here we are setting the parameters.}// Setters & Getters}
在此示例中,如果我创建的对象
Employee并将其设置
empType为某个值,例如“ Manager”,则hibernate将生成和ID,例如“
Emp1Manager”。



