2009-05-20 11 views
3

У меня Hibernate работает и хотел бы попробовать добавить Envers audit/revision functionality, но, похоже, не может понять, что требуется. (мой пример компилируется и работает нормально, и я получаю регулярную функциональность Hibernate, но в моей базе данных нет таблиц аудита.) Кто-то там делал это раньше? Работает ли он с базой данных H2 с использованием диалекта HSQLDB? Есть ли простая и полная программа в Интернете?начало работы с envers + hibernate (простой и полный пример)

Редактировать: Позвольте мне перефразировать немного. В конце концов, я хотел бы, чтобы мой процесс сборки создавал .jar-файл, который я могу установить на другой компьютер, и с соответствующим файлом .properties и JDBC-драйвером, создаст (или разрешит создать) соответствующую базу данных если они еще не присутствуют. Как я могу это сделать?

редактировать: хорошо до сих пор, если я хочу, чтобы запустить муравей задачу, Jamie B предложил, я должен настроить свой путь к классам, так что находит файл Envers банки и файл hibernate-tools банки, который похоронил внутри Hibernate инструменты zip. И я до сих пор не работал. Если/когда я это делаю, я думаю, что, возможно, тогда я смогу создать файл SQL и поместить его в качестве ресурса в мой последний файл .jar, который затем я могу использовать из самой моей программы. (хотя красный флаг уходит в мою голову, думая о проблемах безопасности ... хмм ....)

ответ

1

Вы прочитали главу 6 справочного документа (www.jboss.org/file-access/default/members /envers/downloads/envers-1.2.0.ga-hibernate-3.3.pdf)? Похоже, что таблицы _AUD не создаются в стандартном режиме Hibernate; есть AntTask, который увеличивает его.

+1

где @ #% @% # это org.hibernate.tool.ant.HibernateToolTask ​​найден ???? –

2

Похоже, что вы ищете следующий спящем собственности:

hibernate.hbm2ddl.auto 

От documentation:

Автоматически проверять или экспорт схемы DDL в базе данных, когда SessionFactory создается.

Это автоматически создает таблицы схем, названные в соответствии с установленным вами envers properties. Никаких дополнительных библиотек или муравьиных задач не требуется.

Я, например, добавлю это в мой hibernate.cfg.xml набор для update для моих баз данных разработки. Вы также можете добавить это свойство программно, используя объект configuration Hibernate.

1

после некоторых экспериментов я получил рабочий создания таблицы с Envers

Я использовал эти параметры hibernate.hbm2ddl.auto = создать падение появляется

ошибки, потому что таблица существует, поэтому я думаю, что параметр hibernate.hbm2ddl.Авто = обновление будет решать его

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 

мой конфиг:

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

На несколько дней я сделаю полный пример

+0

спасибо за сообщение - эта проблема до сих пор остается в моей очереди задач, что я не уверен, что у меня будет время посмотреть на нее в ближайшее время, но я очень ценю это - мне пришлось отказаться от подхода, просто не успел выяснить, как заставить его работать. –

+0

так, может быть, вы используете альтернативный подход? если это так, вы могли бы поделиться им? Я думаю, это будет полезно – ziftech