當使用普通休眠這可以通過以下方式進行:如何在Hibernate JPA EntityManager中註冊自定義IdentifierGenerator?
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)。
在此先感謝!
是不是strategy =「xyz」應該是strategy =「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」? –