为允许值javax.persistence.schema-generation.database.action
ARE
没有(不提供任何东西......)
create(仅在第一次启动应用程序时才起作用,因为如果已创建的架构已创建,则由于大多数数据库(例如derby 11.x)导致所有进一步启动失败
drop-and-create(它不会持久存在任何引发问题的数据,为什么它是持久性标准规范的一部分 - 假设调试目的)
下降(对称失败create
成功
这绝对没有选择使用任何这些值,也没有在他们的规范中看到任何意义 - 假设你不希望你的应用程序的用户启动应用程序一次(with create
),破解persistence.xml
文件,重新打包你的应用程序和使用它与none
.如何使用它们在应用程序重启时持久化Java对象呢?
我知道Hibernate的功能hibernate.hbm2ddl.auto
很棒,但我正试图解决JPA 2.1实现便携式方法的难题.
几乎没有什么神秘之处(它们在规范中定义,或者在任何体面的JPA实现的文档中定义).这在创建EMF时运行(或者如果通过持久性调用,则作为单独的前期操作).
"none"
意味着什么都不做......所以像JPA一直做的事情就是持久性.它不是"为任何目的服务",只是为了不做任何额外的事情!
"create"
表示为实体创建表(因此假设它不存在).显然,大多数JPA提供程序将在创建之前检查表的存在,因此它不会"在后续使用中失败".
"drop"
表示删除实体的表(因此,当作为独立进程运行时,例如在测试后清理).
"drop-and-create"
删除并为实体创建表,所以摆脱那些并从头开始.与持久化数据无关,但这些选项都不是.
如上所述,其中一些选项对测试最有用.在现实世界中,大多数人会生成DDL,对其进行优化以满足其DBA要求,并手动生成它,然后只运行JPA,因此在运行时不使用此属性