HHH-7106 - Fix, test and documentation
This commit is contained in:
parent
ba6ad4d072
commit
7c60f01f2d
|
@ -34,10 +34,14 @@
|
||||||
</important>
|
</important>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
And that's all - you can create, modify and delete the entites as always. If you look at the generated
|
And that's all - you can create, modify and delete the entities as always. If you look at the generated
|
||||||
schema for your entities, or at the data persisted by Hibernate, you will notice that there are no changes.
|
schema for your entities, or at the data persisted by Hibernate, you will notice that there are no changes.
|
||||||
However, for each audited entity, a new table is introduced - <literal>entity_table_AUD</literal>,
|
However, for each audited entity, a new table is introduced - <literal>entity_table_AUD</literal>,
|
||||||
which stores the historical data, whenever you commit a transaction.
|
which stores the historical data, whenever you commit a transaction. Envers automatically creates audit
|
||||||
|
tables if <literal>hibernate.hbm2ddl.auto</literal> option is set to <literal>create</literal>,
|
||||||
|
<literal>create-drop</literal> or <literal>update</literal>. Otherwise, to export complete database schema
|
||||||
|
programatically, use <literal>org.hibernate.tool.EnversSchemaGenerator</literal>. Appropriate DDL
|
||||||
|
statements can be also generated with Ant task described later in this manual.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
package org.hibernate.tool;
|
||||||
|
|
||||||
|
import org.hibernate.HibernateException;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.envers.configuration.AuditConfiguration;
|
||||||
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
import org.hibernate.tool.hbm2ddl.SchemaExport;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||||
|
*/
|
||||||
|
public class EnversSchemaGenerator {
|
||||||
|
private final SchemaExport export;
|
||||||
|
|
||||||
|
public EnversSchemaGenerator(ServiceRegistry serviceRegistry, Configuration configuration) {
|
||||||
|
configuration = configureAuditing(configuration);
|
||||||
|
export = new SchemaExport(serviceRegistry, configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EnversSchemaGenerator(Configuration configuration) {
|
||||||
|
configuration = configureAuditing(configuration);
|
||||||
|
export = new SchemaExport(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EnversSchemaGenerator(Configuration configuration, Properties properties) throws HibernateException {
|
||||||
|
configuration = configureAuditing(configuration);
|
||||||
|
export = new SchemaExport(configuration, properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EnversSchemaGenerator(Configuration configuration, Connection connection) throws HibernateException {
|
||||||
|
configuration = configureAuditing(configuration);
|
||||||
|
export = new SchemaExport(configuration, connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SchemaExport export() {
|
||||||
|
return export;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Configuration configureAuditing(Configuration configuration) {
|
||||||
|
configuration.buildMappings();
|
||||||
|
AuditConfiguration.getFor(configuration);
|
||||||
|
return configuration;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
package org.hibernate.envers.test.integration.tools;
|
||||||
|
|
||||||
|
import org.hibernate.MappingException;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.envers.test.AbstractSessionTest;
|
||||||
|
import org.hibernate.envers.test.Priority;
|
||||||
|
import org.hibernate.envers.test.entities.StrTestEntity;
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.tool.EnversSchemaGenerator;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||||
|
*/
|
||||||
|
@TestForIssue(jiraKey = "HHH-7106")
|
||||||
|
public class SchemaExportTest extends AbstractSessionTest {
|
||||||
|
private Integer id = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initMappings() throws MappingException, URISyntaxException {
|
||||||
|
config.addAnnotatedClass(StrTestEntity.class);
|
||||||
|
// Disable schema auto generation.
|
||||||
|
config.setProperty(Environment.HBM2DDL_AUTO, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Priority(10)
|
||||||
|
public void testSchemaCreation() {
|
||||||
|
// Generate complete schema.
|
||||||
|
new EnversSchemaGenerator(config).export().create(true, true);
|
||||||
|
|
||||||
|
// Populate database with test data.
|
||||||
|
Session session = getSession();
|
||||||
|
session.getTransaction().begin();
|
||||||
|
StrTestEntity entity = new StrTestEntity("data");
|
||||||
|
session.save(entity);
|
||||||
|
session.getTransaction().commit();
|
||||||
|
|
||||||
|
id = entity.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAuditDataRetrieval() {
|
||||||
|
Assert.assertEquals(Arrays.asList(1), getAuditReader().getRevisions(StrTestEntity.class, id));
|
||||||
|
Assert.assertEquals(new StrTestEntity("data", id), getAuditReader().find(StrTestEntity.class, id, 1));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue