javax.persistence.schema-generation.database.action
的允许值为
create
成功绝对没有任何选项可以使用这些值,也不会在其规范中看到任何意义 - 假设您不希望应用程序的用户启动应用程序一次(使用create
) ,破解persistence.xml
文件,重新打包您的应用程序并将其与none
一起使用。那么如何使用它们在应用程序重启时持久化Java对象呢?
我知道Hibernate的hibernate.hbm2ddl.auto
效果很好,但是我试图通过JPA 2.1实现便携式方法来解决这个问题。
答案 0 :(得分:7)
几乎没有任何谜(它们在规范中定义,或者在任何体面的JPA实现的文档中定义)。这在创建EMF时运行(或者如果通过持久性调用,则作为单独的前期操作)。
"none"
意味着什么都不做......所以像JPA一样做的事情就是持久性。它不会用于任何目的,只是为了不做任何额外的事情!
"create"
表示为实体创建表(因此假设它不存在)。很明显,大多数JPA提供商会在创建之前检查表的存在,因此它不会在后续使用中失败"。
"drop"
表示删除实体的表(因此,当作为独立进程运行时,请在测试后清理)。
"drop-and-create"
删除并为实体创建表,所以摆脱那些并从头开始。与持久化数据无关,但这些选项都没有。
如上所述,其中一些选项对测试最有用。在现实世界中,大多数人会生成DDL,对其进行优化以满足其DBA要求,并手动生成,然后运行JPA,因此在运行时不使用此属性