При использовании равнину Hibernate это можно сделать следующим образом:Как зарегистрировать собственный идентификатор генератора в Hibernate JPA EntityManager?
public class MyLocalSessionFactoryBean extends LocalSessionFactoryBean {
// can also be made configurable e.g. with Springs EL...
private Class myIdentifierGeneratorClass = MyIdentifierGeneratorClass.class;
@Override
protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {
Configuration config = getConfiguration();
MutableIdentifierGeneratorFactory identifierGeneratorFactory = config.getIdentifierGeneratorFactory();
identifierGeneratorFactory.register("xyz", myIdentifierGeneratorClass);
return super.buildSessionFactory(sfb);
}
}
Теперь можно написать, например,
@MappedSuperclass
public class BaseEntity implements Serializable {
@Id
@GeneratedValue(generator = "generatorName")
@GenericGenerator(name = "generatorName", strategy = "xyz")
private Long id;
}
Как это можно достичь при использовании Hibernate JPA EntityManager?
Возможно, используя LocalContainerEntityManagerFactoryBean#postProcessEntityManagerFactory(EntityManagerFactory emf, PersistenceUnitInfo pui)
?
Я также нашел EntityManagerFactoryBuilderImpl#buildHibernateConfiguration(ServiceRegistry serviceRegistry)
, но я не знаю, где «подключиться» (я использую Spring и/или Spring-Boot и Spring-Data).
Заранее благодарен!
Не является ли стратегия = "xyz" предполагаемой стратегией = "com.mycompany.myIdentifierGeneratorClass"? Стратегия –
должна быть «... либо предопределенной стратегией Hibernate, либо полностью квалифицированным именем класса», см., Например, http://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/annotations/GenericGenerator.html – bgraves
В первом блоке кода вы идентифицируете класс MyIdentifierGeneratorClass.class; это ваш класс, который вы хотите использовать с аннотациями JPA (@GenericGenerator (name = "", strategy = "MyIdentifierGeneratorClass"? –