您的位置:首页 > 其它

Hibernate 5.x版本中SchemaExport的用法

2016-06-21 22:25 295 查看
Hibernate 5.x的版本中,SchemaExport的用法不同于以前的版本,而网上的诸多资料都还停留在以前的3.x, 4.x的API中,这里我简单说一下5.x版本中SchemaExport的用法。分别在5.0.1.Final版本、及5.1.0.Final版本中亲测有效。


一、5.0.1.Final

这个版本中的SchemaExport的API相对较复杂。参考如下:
<code class="hljs d has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">ServiceRegistry serviceRegistry = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> StandardServiceRegistryBuilder().configure().build();

MetadataImplementor metadataImplementor = (MetadataImplementor)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> MetadataSources(serviceRegistry).buildMetadata();

SchemaExport <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> SchemaExport(serviceRegistry, metadataImplementor);
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span>.create(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>


PS:上述代码片段,是本人之前在知乎中的回答,应该不算侵权。如下: 
https://www.zhihu.com/question/35168658


二、5.1.0.Final

知乎上有童鞋反应上述代码片段不能正常使用,本人特意去看了一下最新的5.1.0.Final的版本,发现SchemaExport的API又改了。@_@改得真频繁。 

新版本的API使用参考如下:
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.configure</span>()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.build</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
Metadata metadata = new MetadataSources(serviceRegistry)<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.buildMetadata</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
SchemaExport schemaExport = new SchemaExport()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
schemaExport<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.create</span>(EnumSet<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.of</span>(TargetType<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.DATABASE</span>), metadata)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>


也就是说,create的时候,通过TargetType类型的一个EnumSet,来控制SQL语句的去处。TargetType是一个枚举类型,定义如下:
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">enum</span> TargetType {
<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
* Export to the database.
*/</span>
DATABASE,
<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
* Write to a script file.
*/</span>
SCRIPT,
<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
* Write to {@link System#out}
*/</span>
STDOUT;
}</code>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: