JSP和Hibernate的数据库部署

JSP和Hibernate的数据库部署,hibernate,jsp,Hibernate,Jsp,我正在设计我的第一个JSP应用程序,它将使用hibernate来管理一个非常简单的数据库、几个表和几个外键。 通过学习一些关于hibernate的教程,我了解到hibernate的一个重要特性是它在首次访问db表时自动创建db表。 那么,在生产机器上部署jsp应用程序的常见最佳实践是什么: 1只是不关心db/表的创建,让hibernate动态地完成这项工作 2在第一次运行时,使用ServletContextListener检查/安装数据库 谢谢首先,我建议您使用JSF而不是JSP。JSP是一种非

我正在设计我的第一个JSP应用程序,它将使用hibernate来管理一个非常简单的数据库、几个表和几个外键。 通过学习一些关于hibernate的教程,我了解到hibernate的一个重要特性是它在首次访问db表时自动创建db表。 那么,在生产机器上部署jsp应用程序的常见最佳实践是什么:

1只是不关心db/表的创建,让hibernate动态地完成这项工作

2在第一次运行时,使用ServletContextListener检查/安装数据库


谢谢

首先,我建议您使用JSF而不是JSP。JSP是一种非常古老的Java技术,除非您的用户界面/体验非常基本,否则要使其对用户友好需要付出大量努力。JavaEE的最新教程和官方文档不再详细讨论JSP,因为它的大部分功能现在都集成到JSF中

乍一看,JSF可能看起来复杂而困难,但我可以向您保证,在很短的时间内,您将创建出外观出色的Web应用程序

对于数据库访问,我强烈建议您使用JPA和Hibernate作为持久性提供程序。JPA是连接关系数据库甚至NoSQL数据库的标准方式

更具体地说,关于您的问题,JPA仅在一个文件persistence.xml中配置。创建数据库/表有三个选项,由JPA属性javax.persistence.schema-generation.database.action定义。可能的值是create和drop以及create。第一个值根据需要创建表,第二个值在创建实体管理器工厂时删除并重新创建表。如果属性不存在,则必须手动创建表

在生产环境中,我不喜欢自动创建表,因此我不使用此功能。对于测试环境,拖放和创建非常方便

从你建议的两个选项中,我更喜欢第二个,但我不喜欢。我宁愿手动创建数据库和表

persistence.xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="ExamplePU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <non-jta-data-source>java:/jdbc/example</non-jta-data-source>
    <properties>
      <property name="javax.persistence.schema-generation.database.action" value="create"/>
    </properties>
  </persistence-unit>
</persistence>