Jan*_*nka 10 spring hibernate spring-4 hibernate-5.x
在hibernate 4 - spring 4 setup中,可以使用SchemaExportobject 生成DDL :
LocalSessionFactoryBean sfb = (LocalSessionFactoryBean) context.getBean("&sessionFactory");
SchemaExport schema = new SchemaExport(sfb.getConfiguration());
Run Code Online (Sandbox Code Playgroud)
但是hibernate 5替换了SchemaExport(Configuration configuration)构造函数SchemaExport(MetadataImplementator metadataImplementator).
MetadataImplementator并非随时可用
org.springframework.orm.hibernate5.LocalSessionFactoryBean 要么 org.springframework.orm.hibernate5.LocalSessionFactoryBuilder
我这样砍了它:
MetadataSources metadataSources = (MetadataSources) FieldUtils.readField(configuration, "metadataSources", true);
Metadata metadata = metadataSources
.getMetadataBuilder(configuration.getStandardServiceRegistryBuilder().build())
.applyPhysicalNamingStrategy(new MyPhysicialNamingStrategy())
.applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE)
.build();
MetadataImplementor metadataImpl = (MetadataImplementor) metadata;
SchemaExport schema = new SchemaExport(metadataImplementor);
Run Code Online (Sandbox Code Playgroud)
但是有一个更好的方法会很好,而且Validator注释(@NotNull,@ Size)不用于DDL生成,我不知道它是否是Hibernate 5或此设置中的错误.
我正在使用hibernate 5.0.0.CR4和spring 4.2.0.RELEASE
您需要实现org.hibernate.integrator.spi.Integrator可以将所需数据存储到某个持有者的位置。
您可以在这里找到工作示例https://github.com/valery-barysok/spring4-hibernate5-stackoverflow-34612019
META-INF/services/org.hibernate.integrator.spi.Integrator将其注册为文件中的服务
public class Integrator implements org.hibernate.integrator.spi.Integrator {
@Override
public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
HibernateInfoHolder.setMetadata(metadata);
HibernateInfoHolder.setSessionFactory(sessionFactory);
HibernateInfoHolder.setServiceRegistry(serviceRegistry);
}
@Override
public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
}
}
Run Code Online (Sandbox Code Playgroud)
用它
new SchemaExport((MetadataImplementor) HibernateInfoHolder.getMetadata()).create(true, true);
new SchemaUpdate(HibernateInfoHolder.getServiceRegistry(), (MetadataImplementor) HibernateInfoHolder.getMetadata()).execute(true, true);
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到更多信息:使用 Hibernate 5 和 Spring 4 进行编程 SchemaExport / SchemaUpdate
Java Persistence API有Configuration over Convention其原则,但 Validation API 仅用于验证目的。验证不是绝对的,您可以在同一字段上放置不同的验证规则。
例如,如果你有
@Size(max = 50)
@NotNull(groups = DefaultGroup.class)
@Null(groups = SecondGroup.class)
private String shortTitle;
Run Code Online (Sandbox Code Playgroud)
那么它被解释为
@Size(max = 50)
@NotNull(groups = DefaultGroup.class)
@Null(groups = SecondGroup.class)
@Column(length = 255, nullable = true)
private String shortTitle;
Run Code Online (Sandbox Code Playgroud)
请在此处查看更多详细信息 为什么 Hibernate Tools hbm2ddl 生成不考虑 Bean Validation 注释?
| 归档时间: |
|
| 查看次数: |
6149 次 |
| 最近记录: |