【问题标题】:getting started with envers + hibernate (simple and COMPLETE example)envers + hibernate 入门(简单和完整的示例)
【发布时间】:2010-10-27 16:03:00
【问题描述】:

我有 Hibernate 工作,想尝试添加 Envers audit/revision functionality,但似乎无法弄清楚需要什么。 (我的示例编译并运行正常,我获得了常规的 Hibernate 功能,但我的数据库中没有出现审计表。)以前有人做过吗?它是否适用于使用 HSQLDB 方言的 H2 数据库?网络上有没有简单且完整的示例程序?

编辑:让我稍微改一下。最后,我希望我的构建过程创建一个 .jar 文件,我可以将其安装在另一台计算机上,并使用适当的 .properties 文件和 JDBC 驱动程序创建(或允许我创建)适当的数据库表(如果它们不存在)。我该怎么做?

编辑:到目前为止,如果我想运行 Jamie B 建议的 ant 任务,我必须调整我的类路径,以便它找到 envers jar 文件和 hibernate-tools jar 文件隐藏在 Hibernate 工具 zip 中。而且我还没有让事情奏效。如果/当我这样做时,我想也许我可以创建一个 SQL 文件并将其作为资源放在我的最终 .jar 文件中,然后我可以在我的程序本身中使用它。 (虽然考虑到安全问题在我脑海中闪现出一个危险信号……嗯……)

【问题讨论】:

    标签: java hibernate hibernate-envers


    【解决方案1】:

    您是否阅读了参考文档的第 6 章(www.jboss.org/file-access/default/members/envers/downloads/envers-1.2.0.ga-hibernate-3.3.pdf)?看起来 _AUD 表不是以标准 Hibernate 方式创建的;有一个 AntTask 可以增强它。

    【讨论】:

      【解决方案2】:

      听起来您正在寻找以下休眠属性:

      hibernate.hbm2ddl.auto
      

      来自documentation

      自动验证或导出 schema DDL 到数据库时 SessionFactory 已创建。

      这会自动创建根据您设置的envers properties 命名的架构表。不需要额外的库或 ant 任务。

      例如,我将此添加到我的 hibernate.cfg.xml 设置为 update 用于我的开发数据库。您还可以使用 Hibernate 的 configuration 对象以编程方式添加此属性。

      【讨论】:

        【解决方案3】:

        经过一些实验,我已经用 envers 生成了工作表

        我使用了这些参数 hibernate.hbm2ddl.auto=create-drop

        因为表存在而出现错误,所以我认为,该参数 hibernate.hbm2ddl.auto=update 将解决它

        日志:

            5755 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myappcompany.base.Company_AUD -> company_AUD
        5782 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.hibernate.envers.DefaultRevisionEntity -> REVINFO
        5915 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
        6746 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
        6784 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - Running hbm2ddl schema export
        6785 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - exporting generated schema to database
        9004 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table company (ID bigint not null auto_increment, CREATED datetime, CREATED_BY varchar(255), MODIFIED datetime, MODIFIED_BY varchar(255), NAME varchar(255) not null, primary key (ID))
        9004 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Table 'company' already exists
        10227 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete
        

        我的配置:

        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
            xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"
            xmlns:aop="http://www.springframework.org/schema/aop"
            xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
        
            <!--
            Data Source config 
             -->
            <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                destroy-method="close" p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}"
                p:username="${jdbc.username}" p:password="${jdbc.password}" />
        
            <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
                p:entity-manager-factory-ref="entityManagerFactory" />
        
            <!-- 
            JPA config   
            -->
            <tx:annotation-driven />
        
            <bean id="entityManagerFactory"
                class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
                p:persistence-xml-location="${persistence.xml.location}"
                p:data-source-ref="dataSource">
                <property name="jpaVendorAdapter">
                    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
                        p:showSql="true" p:generateDdl="true">
                    </bean>
                </property>
                <property name="jpaProperties">
                    <value>
                        hibernate.ejb.naming_strategy=org.hibernate.cfg.DefaultNamingStrategy
                        hibernate.dialect=${hibernate.dialect}
                        hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}
                    </value>
                </property>
            </bean>
        
            <bean
                class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
        </beans>
        

        过几天我会做一个完整的例子

        【讨论】:

        • 感谢您的帖子——这个问题在我的任务队列中太远了,我不确定我是否有时间很快查看它,但我真的很感激——我有放弃 envers 方法,因为我只是没有时间弄清楚如何让它工作。
        • 所以也许你使用了另一种方法?如果是这样,你能分享一下吗?我认为这会有所帮助
        猜你喜欢
        • 2012-04-30
        • 2014-02-05
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多