当前位置:  开发笔记 > 编程语言 > 正文

如何使用JPA 2.1属性javax.persistence.schema-generation.database.action?

如何解决《如何使用JPA2.1属性javax.persistence.schema-generation.database.action?》经验,为你挑选了1个好方法。

为允许值javax.persistence.schema-generation.database.actionARE

没有(不提供任何东西......)

create(仅在第一次启动应用程序时才起作用,因为如果已创建的架构已创建,则由于大多数数据库(例如derby 11.x)导致所有进一步启动失败

drop-and-create(它不会持久存在任何引发问题的数据,为什么它是持久性标准规范的一部分 - 假设调试目的)

下降(对称失败create成功

这绝对没有选择使用任何这些值,也没有在他们的规范中看到任何意义 - 假设你不希望你的应用程序的用户启动应用程序一次(with create),破解persistence.xml文件,重新打包你的应用程序和使用它与none.如何使用它们在应用程序重启时持久化Java对象呢?

我知道Hibernate的功能hibernate.hbm2ddl.auto很棒,但我正试图解决JPA 2.1实现便携式方法的难题.



1> 小智..:

几乎没有什么神秘之处(它们在规范中定义,或者在任何体面的JPA实现的文档中定义).这在创建EMF时运行(或者如果通过持久性调用,则作为单独的前期操作).

"none"意味着什么都不做......所以像JPA一直做的事情就是持久性.它不是"为任何目的服务",只是为了不做任何额外的事情!

"create"表示为实体创建表(因此假设它不存在).显然,大多数JPA提供程序将在创建之前检查表的存在,因此它不会"在后续使用中失败".

"drop" 表示删除实体的表(因此,当作为独立进程运行时,例如在测试后清理).

"drop-and-create"删除并为实体创建表,所以摆脱那些并从头开始.与持久化数据无关,但这些选项都不是.

如上所述,其中一些选项对测试最有用.在现实世界中,大多数人会生成DDL,对其进行优化以满足其DBA要求,并手动生成它,然后只运行JPA,因此在运行时不使用此属性

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有