3

简短版本: 如何在不使用 IDE 或构建工具(例如,不使用 Eclipse 或 Maven)的情况下将 Hibernate 合并到应用程序中?

长版:

让我们想象一下我生活在一个 Eclipse 和 Maven(以及它们的同类)是非法的国家。政府规定我们都用 vi 编写代码并用 javac 编译。我们如何将 Hibernate 4.2 合并到我们的应用程序中?哪些 jar 文件需要在我们的类路径中?必须创建哪些配置文件?(配置文件的名称就足够了,我不需要内容的描述。)

我有点惊讶地发现这样的一组指令已经不存在了。一切都是为 Eclipse 和/或 Maven 用户编写的。

哦,我们得到了一份 hibernate-release-4.2.2.Final.gz 的副本。

4

2 回答 2

1

没有你想的那么疯狂。是的,很难从 SO 那里得到答案,因为这里所有的休眠人员都使用 spring 或 maven 或一些非常花哨的工具来简化休眠配置。

这就是我所做的。

将所有库复制到类路径。在我的 src 文件夹中创建了一个 hibernate.properties 和 hibernate.xml 文件。

属性文件有

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hsqldb.write_delay_millis=0
shutdown=true
hibernate.connection.pool_size=2
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

在您的 java main 中,您可以以编程方式指定 mysql 服务器、用户名和密码(请注意,您花了我 2 天时间才让这该死的东西正常工作,几乎没有得到 SO 的帮助)。

synchronized (this) {
        if (sessionFactory == null) {
            try {
                String connection = "jdbc:mysql://"
                        + Globals.DBSERVER.trim()
                        + "/mCruiseOnServerDB?autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
                log.debug("Connection URL "+connection) ;
                Configuration configuration = new Configuration();
                configuration
                        .setProperty("hibernate.connection.username", Globals.DB_USER_NAME.trim())
                        .setProperty("hibernate.connection.password", Globals.DB_PASSWORD.trim());
                configuration.configure();
                        sessionFactory = configuration
                                .buildSessionFactory(new ServiceRegistryBuilder()
                                .applySettings(configuration.getProperties()) 
                                .buildServiceRegistry());
                } catch (Exception e) {
                log.fatal("Unable to create SessionFactory for Hibernate");
                log.fatal(e.getMessage());
                log.fatal(e);
                e.printStackTrace();
                }
        }

        if (sessionFactory == null) {
            log.fatal("Hibernate not configured.");
            System.exit(0);
        }

XML文件有

<?xml version='1.0' encoding='UTF-8'?>
 <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- other mappings -->
        <mapping resource="com/mcruiseon/server/hibernate/UserDetails.hbm.xml" />
    </session-factory>
</hibernate-configuration>

确保这些 hbm.xml 文件位于文件夹(在 src 内部)com.mcruiseon.server.hibernate(在某些情况下还包括 /carpool)。

同一个文件夹还应该有对应于 hbm 文件的 POJO。我建议你保持你的数据库列名与你的变量名完全相同,这让生活变得非常简单(与一些愚蠢的人可能建议的相反)。不要使用类似的名称t_age而不是使用age(没有首字母缩写词)。

hbm 文件示例

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 9 Jun, 2010 11:14:41 PM by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
    <class name="com.mcruiseon.common.concrete.UserDetailsConcrete"
        table="userDetails">
        <id name="identityHash" type="java.lang.String">
            <column name="identityHash" />
            <generator class="assigned" />
        </id>
        <property name="fullName" type="java.lang.String">
            <column name="fullName" />
        </property>
        <!-- other property -->
    </class>
</hibernate-mapping>

在 com/mcruiseon/common/concrete 文件夹中创建一个 UserDetailsConcrete

确保所有变量都是私有的(identityHash、fullName...等)。确保您有所有公开的 getter 和 setter。事实上自动生成它(如果你有 Eclipse,对不起)。不要有拼写错误和大写错误。复制粘贴以确保。

你应该让它工作。

于 2013-05-23T18:49:39.507 回答
1

简短回答:如果它是一个简单的 java 应用程序,如果您使用的是版本,那么您只3.3.2.GA需要hibernate-core在类路径上即可。在执行 main 方法之前使用java -cp适当的参数将使您启动并运行。
所有其他配置文件都是来自 hibernate 的样板教程。
此外,maven 和 ant 也不是灵丹妙药。他们不会神奇地知道需要哪些文件。所有细节都需要分别连接到 pom 或构建文件中。
高温高压

于 2013-05-23T18:54:59.037 回答