Getting started with envers + hibernate (simple and complete example)

Hibernate works for me and would like to try adding Enable audit / revision functions , but it seems to be unable to understand what is required. (My example compiles and works fine, and I get Hibernate regular functionality, but there are no audit tables in my database.) Has anyone done this before? Does it work with an H2 database using the HSQLDB dialect? Is there a simple and complete example program on the Internet?

edit: let me rephrase a little. In the end, I would like my build process to create a .jar file that I can install on another computer, and with the corresponding .properties file and JDBC driver, will create (or allow to create) the corresponding database if they are not already present . How can i do this?

edit: Well, if I want to run the ant task proposed by Jamie B., I need to configure my classpath to find the envers jar file and the hibernate-tools jar file that is buried inside the Hibernate zip server. And I still haven't worked. If / when I do this, I think that maybe then I can create an SQL file and put it as a resource in my last .jar file, which I can then use from my program itself. (although the red flag goes into my head thinking about security issues ... hmm ....)

+3
source share
3 answers

It looks like you are looking for the following sleep mode property:

hibernate.hbm2ddl.auto

From the documentation :

DDL , SessionFactory.

,

+2

6 (www.jboss.org/file-access/default/members/envers/downloads/envers-1.2.0.ga-hibernate-3.3.pdf)? , _AUD Hibernate; AntTask, .

+1

envers

hibernate.hbm2ddl.auto = create-drop

, , , hibernate.hbm2ddl.auto = update

Log:

    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

my config:

<?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>

+1

Source: https://habr.com/ru/post/1708743/


All Articles