java - Hibernate:从 Java 代码开始数据库布局

标签 java database hibernate jakarta-ee

假设有以下简单的类:

package Sample;  

    public class Status {

        private Long id;
        private String status;

        public Status() {}

        public Status(String status) {
        this.status = status;
        }   

        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getStatus() {
            return status;
        }
        public void setStatus(String status) {
            this.status = status;
        }
    }  

对于这个类,我在 Status.hbm.xml 中定义了 hibernate-mapping。
该文件向 Hibernate 描述了如何将类映射到表。
在 hibernate.cfg 中,我定义了如何连接到我的数据库 (MySQL)。

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.username">root</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <mapping resource="sample/Status.hbm.xml"/>
    </session-factory>
</hibernate-configuration>  

我不明白的是:
使用此配置,当我尝试使用 org.hibernate.Session 将 Status 对象保存到数据库时,它提示没有可连接的数据库。

842 [main] ERROR org.hibernate.util.JDBCExceptionReporter - No database selected

如果我添加现有数据库作为 hibernate.cfg.xml 的 URL 连接字符串的一部分,即

<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property>  

我收到另一个错误,提示表 test.status 不存在。
我期待 Hibernate 会创建它。
仅当我这样做时,代码才会成功:

SchemaExport schemaExport = new SchemaExport(cfg);
schemaExport.create(false, true);  

所以我的问题是,使用 Hibernate 并从 Java 开始创建架构、数据库及其表的正确过程是什么。
我不想在 MySQL 中手动创建数据库,例如从 MySQL 客户端。
上述使用 SchemaExport 的方法是否正确?
从 Java DB 设计开始的最佳选择是什么?

最佳答案

让 Hibernate 创建表结构对于测试来说很好,但是一旦应用程序部署到生产环境并实际运行,您将希望 Hibernate 创建表结构每次重新部署时都会删除数据库,因为它会清除您的数据。习惯创建ALTER脚本来管理数据库更改是一个好习惯,因为大多数开发都不是新的,而是更新现有系统。

话虽这么说,是的,您所指出的方式是让 Hibernate 创建数据库模式的正确方式。您还可以在 Hibernate 配置文件中设置这种情况,但我不记得这个属性了。

关于java - Hibernate:从 Java 代码开始数据库布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7449573/

相关文章:

java - Struts 1 是否为每个 session 创建一个 Controller 对象,或者 Controller 类是单例吗?

Mysql 查询给出重复行

java - 如果外键引用空行而键不可为空,如何不崩溃?

database - 面向列和面向行的数据库有什么区别?

java - 如何使用 @ID 和 @GenerateValue 从 Hibernate + JPA 中的序列获取 Oracle 生成值

java - 具有自动增量的主/详细信息关系。是否可以立即坚持它们?

java - 工作集是否等同于 Visual Studio 中的解决方案

java - 虚拟键盘上方的 PopupWindow

java - 如何使用Redisson Client获取缓存的值

php - 从sql表中选择随机行时如何防止选择已删除的ID