我有一个mysql数据库,我想添加向数据库添加新表的功能。我可能很容易找到JPQL的例子,但是我如何自动生成这个新表的实体,以便我可以在我的JPA代码的其余部分引用它来更新和从表中删除我通常引用实体不是实际的表本身。
我现在拥有的实体我已经使用eclipe从我创建的表中生成。但是在部署之后我们显然不会让Eclipse这样做所以我们需要在每次创建表时自动完成它。
答案 0 :(得分:7)
动态创建和映射新表不是JPA支持的。它需要动态创建新的Java类并动态更新映射元数据。您可以使用JDBC或本机查询执行所需的一切。但也许您应该解释为什么需要动态创建新表。
答案 1 :(得分:3)
有几种方法可以创建表格。生产使用最常见的是DBA(或该角色中的开发人员)独立于应用程序创建数据库模式(表等)。
这是典型的,因为应用程序然后对数据库中的数据进行建模,并且有一个共同的智慧,即数据库通常比应用程序更长。
可以让JPA提供程序自动创建架构。 JPA注释中甚至有一些属性专门用于此目的(例如nullable
属性JoinColumn
)。
使用persistence.xml中的提供程序特定属性来激活此操作。例如。 hibernate.hbm2ddl.auto
用于Hibernate(用于JBoss AS)和eclipselink.ddl-generation
用于EclipseLink(用于GlassFish)。
有关示例,请参阅http://wiki.eclipse.org/EclipseLink/Examples/JPA/Migration/JBoss。
在表中插入实体是完全不同的事情。从你的问题中得到的感觉是你可能无法完全理解这两者之间的区别。它发生在例如EntityManager#persist
,但我不能100%确定这是否是您所要求的。
答案 2 :(得分:1)
您可以配置hibernate属性或persistence.xml以在服务器启动时更新db。它会自动进行表格更新。 看看hibernateDialect参数旁边。
<property name="hibernate.hbm2ddl.auto" value="update" />
是你想要的。 我不认为你想要动态创建实体类,并希望在没有重新部署的情况下创建表,正如@JB Nizet在他的回答中所说。