import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.envers.AuditTable;
import org.hibernate.envers.Audited;
@Entity
@Audited
@AuditTable("historico")
public class Usuario implements Serializable {
@Id
@GeneratedValue
private Long id;
private String login;
private String senha;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
Gerar tabela
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class GerarTabela {
public static void main(String[] args) {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Usuario.class);
cfg.configure();
SchemaExport se = new SchemaExport(cfg);
se.create(true, true);
}
}
Adiciona
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class Adiciona {
public static void main(String[] args) {
Usuario u = new Usuario();
u.setLogin("FELIPE");
u.setSenha("123");
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Usuario.class);
cfg.configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
session.save(u);
session.close();
}
}
Saida da execução
run:
00:09:13 INFO [Version ] Hibernate Annotations 3.5.0-Final
00:09:13 INFO [Environment ] Hibernate 3.5.0-Final
00:09:13 INFO [Environment ] hibernate.properties not found
00:09:13 INFO [Environment ] Bytecode provider name : javassist
00:09:13 INFO [Environment ] using JDK 1.4 java.sql.Timestamp handling
00:09:13 INFO [Version ] Hibernate Commons Annotations 3.2.0.Final
00:09:13 INFO [Configuration ] configuring from resource: /hibernate.cfg.xml
00:09:13 INFO [Configuration ] Configuration resource: /hibernate.cfg.xml
00:09:14 INFO [Configuration ] Configured SessionFactory: null
00:09:14 INFO [HibernateSearchEventListenerRegister] Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
00:09:14 INFO [AnnotationBinder ] Binding entity from annotated class: Usuario
00:09:14 INFO [EntityBinder ] Bind entity Usuario on table Usuario
00:09:14 INFO [AnnotationConfiguration] Hibernate Validator not found: ignoring
00:09:14 INFO [DriverManagerConnectionProvider] Using Hibernate built-in connection pool (not for production use!)
00:09:14 INFO [DriverManagerConnectionProvider] Hibernate connection pool size: 20
00:09:14 INFO [DriverManagerConnectionProvider] autocommit mode: false
00:09:14 INFO [DriverManagerConnectionProvider] using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/teste
00:09:14 INFO [DriverManagerConnectionProvider] connection properties: {user=root, password=****}
00:09:14 INFO [SettingsFactory ] RDBMS: MySQL, version: 5.1.41
00:09:14 INFO [SettingsFactory ] JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.0.7 ( $Date: 2007-03-09 22:13:57 +0100 (Fri, 09 Mar 2007) $, $Revision: 6341 $ )
00:09:14 INFO [Dialect ] Using dialect: org.hibernate.dialect.MySQLMyISAMDialect
00:09:15 INFO [JdbcSupportLoader ] Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
00:09:15 INFO [TransactionFactoryFactory] Using default transaction strategy (direct JDBC transactions)
00:09:15 INFO [TransactionManagerLookupFactory] No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
00:09:15 INFO [SettingsFactory ] Automatic flush during beforeCompletion(): disabled
00:09:15 INFO [SettingsFactory ] Automatic session close at end of transaction: disabled
00:09:15 INFO [SettingsFactory ] JDBC batch size: 15
00:09:15 INFO [SettingsFactory ] JDBC batch updates for versioned data: disabled
00:09:15 INFO [SettingsFactory ] Scrollable result sets: enabled
00:09:15 INFO [SettingsFactory ] JDBC3 getGeneratedKeys(): enabled
00:09:15 INFO [SettingsFactory ] Connection release mode: auto
00:09:15 INFO [SettingsFactory ] Maximum outer join fetch depth: 2
00:09:15 INFO [SettingsFactory ] Default batch fetch size: 1
00:09:15 INFO [SettingsFactory ] Generate SQL with comments: disabled
00:09:15 INFO [SettingsFactory ] Order SQL updates by primary key: disabled
00:09:15 INFO [SettingsFactory ] Order SQL inserts for batching: disabled
00:09:15 INFO [SettingsFactory ] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
00:09:15 INFO [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
00:09:15 INFO [SettingsFactory ] Query language substitutions: {}
00:09:15 INFO [SettingsFactory ] JPA-QL strict compliance: disabled
00:09:15 INFO [SettingsFactory ] Second-level cache: enabled
00:09:15 INFO [SettingsFactory ] Query cache: disabled
00:09:15 INFO [SettingsFactory ] Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
00:09:15 INFO [SettingsFactory ] Optimize cache for minimal puts: disabled
00:09:15 INFO [SettingsFactory ] Structured second-level cache entries: disabled
00:09:15 INFO [SettingsFactory ] Echoing all SQL to stdout
00:09:15 INFO [SettingsFactory ] Statistics: disabled
00:09:15 INFO [SettingsFactory ] Deleted entity synthetic identifier rollback: disabled
00:09:15 INFO [SettingsFactory ] Default entity-mode: pojo
00:09:15 INFO [SettingsFactory ] Named query checking : enabled
00:09:15 INFO [SettingsFactory ] Check Nullability in Core (should be disabled when Bean Validation is on): enabled
00:09:15 INFO [HbmBinder ] Mapping class: Usuario_AUD -> historico
00:09:15 INFO [HbmBinder ] Mapping class: org.hibernate.envers.DefaultRevisionEntity -> REVINFO
00:09:15 INFO [SessionFactoryImpl ] building session factory
00:09:15 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
Hibernate: insert into Usuario (login, senha) values (?, ?)
CONSTRUÍDO COM SUCESSO (tempo total: 3 segundos)
fabiozanardi
O Envers é uma ferramenta de Auditoria que se não me engano foo incluida a partir do Hibernate 3.5
Ainda vou testar ela, mas o que andei lendo, ela funciona mais ou menos assim:
Você tem uma aplicação de cadastro, e quer ter um histórico do que foi alterado, inserido ou excluido.
O Envers cria uma tabela identica a sua tabela de cadastro no seu Banco, e cada vez que você faz um insert, update ou delete na sua tabela de cadastro, o Envers automaticamente faz um insert na 2º tabela que seria o histórico.
3 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.6-Final
43 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.6-Final
48 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
56 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
68 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
337 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
361 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
363 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
528 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
566 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
709 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Model.Usuario
826 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Model.Usuario on table Usuario
937 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
1073 [main] INFO org.hibernate.util.NamingHelper - JNDI InitialContext properties:{}
1084 [main] ERROR org.hibernate.connection.DatasourceConnectionProvider - Could not find datasource: java:/comp/env/jdbc/teste
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:143)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:84)
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:438)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:91)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at Adiciona.main(Adiciona.java:18)
Exception in thread "main" org.hibernate.HibernateException: Could not find datasource
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:143)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:84)
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:438)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:91)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at Adiciona.main(Adiciona.java:18)
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
... 9 more
Java Result: 1