Index: src/main/java/org/sonar/commons/Metric.java
===================================================================
--- src/main/java/org/sonar/commons/Metric.java	(révision 2581)
+++ src/main/java/org/sonar/commons/Metric.java	(copie de travail)
@@ -50,8 +50,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "METRICS_SEQ", sequenceName = "METRICS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "METRICS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "name", updatable = false, nullable = false, length = 64)
Index: src/main/java/org/sonar/commons/alerts/Alert.java
===================================================================
--- src/main/java/org/sonar/commons/alerts/Alert.java	(révision 2581)
+++ src/main/java/org/sonar/commons/alerts/Alert.java	(copie de travail)
@@ -42,8 +42,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "ALERTS_SEQ", sequenceName = "ALERTS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "ALERTS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @ManyToOne(fetch = FetchType.LAZY)
Index: src/main/java/org/sonar/commons/configuration/Property.java
===================================================================
--- src/main/java/org/sonar/commons/configuration/Property.java	(révision 2581)
+++ src/main/java/org/sonar/commons/configuration/Property.java	(copie de travail)
@@ -32,8 +32,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "PROPERTIES_SEQ", sequenceName = "PROPERTIES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "PROPERTIES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "prop_key", updatable = true, nullable = true)
Index: src/main/java/org/sonar/commons/database/dialect/Oracle10gWithDecimalDialect.java
===================================================================
--- src/main/java/org/sonar/commons/database/dialect/Oracle10gWithDecimalDialect.java	(révision 2581)
+++ src/main/java/org/sonar/commons/database/dialect/Oracle10gWithDecimalDialect.java	(copie de travail)
@@ -21,6 +21,7 @@
 
 import org.hibernate.dialect.Oracle10gDialect;
 import org.sonar.commons.database.DatabaseProperties;
+import org.sonar.commons.database.id.OracleSequenceGenerator;
 
 import java.sql.Types;
 
@@ -31,4 +32,8 @@
     registerColumnType(Types.VARCHAR, DatabaseProperties.MAX_TEXT_SIZE, "clob");
     registerColumnType(Types.VARBINARY, "blob" );
   }
+  
+  public Class getNativeIdentifierGeneratorClass() {
+    return OracleSequenceGenerator.class;
+  }
 }
\ No newline at end of file
Index: src/main/java/org/sonar/commons/database/id/OracleSequenceGenerator.java
===================================================================
--- src/main/java/org/sonar/commons/database/id/OracleSequenceGenerator.java	(révision 0)
+++ src/main/java/org/sonar/commons/database/id/OracleSequenceGenerator.java	(révision 0)
@@ -0,0 +1,52 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2009 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.commons.database.id;
+
+import java.util.Properties;
+
+import org.hibernate.MappingException;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.id.PersistentIdentifierGenerator;
+import org.hibernate.id.SequenceGenerator;
+import org.hibernate.type.Type;
+
+public class OracleSequenceGenerator extends SequenceGenerator {
+
+  public static final String SEQUENCE_NAME_SUFFIX = "_SEQ";
+
+  @Override
+  public void configure(Type type, Properties params, Dialect dialect)
+      throws MappingException {
+	
+    String tableName = params.getProperty(PersistentIdentifierGenerator.TABLE);
+
+    if (tableName != null) {
+      StringBuilder sequenceNameBuilder = new StringBuilder();
+
+      sequenceNameBuilder.append(tableName);
+      sequenceNameBuilder.append(SEQUENCE_NAME_SUFFIX);
+
+      params.setProperty(SEQUENCE, sequenceNameBuilder.toString().toUpperCase());
+    }
+
+    super.configure(type, params, dialect);
+  }
+
+}
Index: src/main/java/org/sonar/commons/events/Event.java
===================================================================
--- src/main/java/org/sonar/commons/events/Event.java	(révision 2581)
+++ src/main/java/org/sonar/commons/events/Event.java	(copie de travail)
@@ -34,8 +34,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "EVENTS_SEQ", sequenceName = "EVENTS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "EVENTS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "name", updatable = true, nullable = true, length = 50)
Index: src/main/java/org/sonar/commons/measures/AsyncMeasureSnapshot.java
===================================================================
--- src/main/java/org/sonar/commons/measures/AsyncMeasureSnapshot.java	(révision 2581)
+++ src/main/java/org/sonar/commons/measures/AsyncMeasureSnapshot.java	(copie de travail)
@@ -33,8 +33,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "ASYNC_MEASURE_SNAPSHOTS_SEQ", sequenceName = "ASYNC_MEASURE_SNAPSHOTS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "ASYNC_MEASURE_SNAPSHOTS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "project_measure_id", updatable = true, nullable = true)
Index: src/main/java/org/sonar/commons/resources/Measure.java
===================================================================
--- src/main/java/org/sonar/commons/resources/Measure.java	(révision 2581)
+++ src/main/java/org/sonar/commons/resources/Measure.java	(copie de travail)
@@ -38,8 +38,7 @@
   
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "PROJECT_MEASURES_SEQ", sequenceName = "PROJECT_MEASURES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "PROJECT_MEASURES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "value", updatable = true, nullable = true, precision = 30, scale = 20)
Index: src/main/java/org/sonar/commons/resources/MeasureData.java
===================================================================
--- src/main/java/org/sonar/commons/resources/MeasureData.java	(révision 2581)
+++ src/main/java/org/sonar/commons/resources/MeasureData.java	(copie de travail)
@@ -27,8 +27,7 @@
 public class MeasureData {
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "MEASURE_DATA_SEQ", sequenceName = "MEASURE_DATA_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "MEASURE_DATA_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @OneToOne(fetch = FetchType.LAZY)
Index: src/main/java/org/sonar/commons/resources/ProjectLink.java
===================================================================
--- src/main/java/org/sonar/commons/resources/ProjectLink.java	(révision 2581)
+++ src/main/java/org/sonar/commons/resources/ProjectLink.java	(copie de travail)
@@ -36,8 +36,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "PROJECT_LINKS_SEQ", sequenceName = "PROJECT_LINKS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "PROJECT_LINKS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @ManyToOne(fetch = FetchType.LAZY)
Index: src/main/java/org/sonar/commons/resources/Resource.java
===================================================================
--- src/main/java/org/sonar/commons/resources/Resource.java	(révision 2581)
+++ src/main/java/org/sonar/commons/resources/Resource.java	(copie de travail)
@@ -55,8 +55,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "PROJECTS_SEQ", sequenceName = "PROJECTS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "PROJECTS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "name", updatable = true, nullable = true, length = NAME_COLUMN_SIZE)
Index: src/main/java/org/sonar/commons/resources/Snapshot.java
===================================================================
--- src/main/java/org/sonar/commons/resources/Snapshot.java	(révision 2581)
+++ src/main/java/org/sonar/commons/resources/Snapshot.java	(copie de travail)
@@ -39,8 +39,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "SNAPSHOTS_SEQ", sequenceName = "SNAPSHOTS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "SNAPSHOTS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @ManyToOne(fetch = FetchType.LAZY)
Index: src/main/java/org/sonar/commons/resources/SnapshotSource.java
===================================================================
--- src/main/java/org/sonar/commons/resources/SnapshotSource.java	(révision 2581)
+++ src/main/java/org/sonar/commons/resources/SnapshotSource.java	(copie de travail)
@@ -29,8 +29,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "SNAPSHOT_SOURCES_SEQ", sequenceName = "SNAPSHOT_SOURCES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "SNAPSHOT_SOURCES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "snapshot_id")
Index: src/main/java/org/sonar/commons/rules/ActiveRule.java
===================================================================
--- src/main/java/org/sonar/commons/rules/ActiveRule.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/ActiveRule.java	(copie de travail)
@@ -30,12 +30,10 @@
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
-import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
 
 import org.apache.commons.collections.CollectionUtils;
@@ -50,8 +48,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "ACTIVE_RULES_SEQ", sequenceName = "ACTIVE_RULES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "ACTIVE_RULES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @ManyToOne(fetch = FetchType.EAGER)
Index: src/main/java/org/sonar/commons/rules/ActiveRuleParam.java
===================================================================
--- src/main/java/org/sonar/commons/rules/ActiveRuleParam.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/ActiveRuleParam.java	(copie de travail)
@@ -30,8 +30,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "ACTIVE_RULE_PARAMETERS_SEQ", sequenceName = "ACTIVE_RULE_PARAMETERS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "ACTIVE_RULE_PARAMETERS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @ManyToOne(fetch = FetchType.LAZY)
Index: src/main/java/org/sonar/commons/rules/Rule.java
===================================================================
--- src/main/java/org/sonar/commons/rules/Rule.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/Rule.java	(copie de travail)
@@ -38,8 +38,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "RULES_SEQ", sequenceName = "RULES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "name", updatable = true, nullable = false)
Index: src/main/java/org/sonar/commons/rules/RuleFailure.java
===================================================================
--- src/main/java/org/sonar/commons/rules/RuleFailure.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/RuleFailure.java	(copie de travail)
@@ -40,8 +40,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "RULE_FAILURES_SEQ", sequenceName = "RULE_FAILURES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULE_FAILURES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "snapshot_id")
Index: src/main/java/org/sonar/commons/rules/RuleFailureParam.java
===================================================================
--- src/main/java/org/sonar/commons/rules/RuleFailureParam.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/RuleFailureParam.java	(copie de travail)
@@ -31,8 +31,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "RULE_FAILURE_PARAMS_SEQ", sequenceName = "RULE_FAILURE_PARAMS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULE_FAILURE_PARAMS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "param_key", updatable = false, nullable = false, length = PARAM_KEY_COLUMN_SIZE)
Index: src/main/java/org/sonar/commons/rules/RuleParam.java
===================================================================
--- src/main/java/org/sonar/commons/rules/RuleParam.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/RuleParam.java	(copie de travail)
@@ -32,8 +32,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "RULES_PARAMETERS_SEQ", sequenceName = "RULES_PARAMETERS_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULES_PARAMETERS_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @ManyToOne(fetch = FetchType.LAZY)
Index: src/main/java/org/sonar/commons/rules/RulesCategory.java
===================================================================
--- src/main/java/org/sonar/commons/rules/RulesCategory.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/RulesCategory.java	(copie de travail)
@@ -36,8 +36,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "RULES_CATEGORIES_SEQ", sequenceName = "RULES_CATEGORIES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULES_CATEGORIES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "name", updatable = false, nullable = false)
Index: src/main/java/org/sonar/commons/rules/RulesProfile.java
===================================================================
--- src/main/java/org/sonar/commons/rules/RulesProfile.java	(révision 2581)
+++ src/main/java/org/sonar/commons/rules/RulesProfile.java	(copie de travail)
@@ -43,8 +43,7 @@
 
   @Id
   @Column(name = "id")
-  @SequenceGenerator(name = "RULES_PROFILES_SEQ", sequenceName = "RULES_PROFILES_SEQ")
-  @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULES_PROFILES_SEQ")
+  @GeneratedValue
   private Integer id;
 
   @Column(name = "name", updatable = true, nullable = false)
Index: src/test/java/org/sonar/commons/database/id/OracleSequenceGeneratorTest.java
===================================================================
--- src/test/java/org/sonar/commons/database/id/OracleSequenceGeneratorTest.java	(révision 0)
+++ src/test/java/org/sonar/commons/database/id/OracleSequenceGeneratorTest.java	(révision 0)
@@ -0,0 +1,43 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2009 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.commons.database.id;
+
+import static org.hamcrest.CoreMatchers.is;
+import org.hibernate.id.PersistentIdentifierGenerator;
+import static org.junit.Assert.assertThat;
+import org.junit.Test;
+import org.sonar.commons.database.dialect.Oracle10gWithDecimalDialect;
+
+import java.util.Properties;
+
+public class OracleSequenceGeneratorTest {
+
+  @Test
+  public void sequenceNameShouldFollowRailsConventions() {
+    Properties props = new Properties();
+    props.setProperty(PersistentIdentifierGenerator.TABLE, "my_table");
+    props.setProperty(PersistentIdentifierGenerator.PK, "id");
+
+    OracleSequenceGenerator generator = new OracleSequenceGenerator();
+    generator.configure(null, props, new Oracle10gWithDecimalDialect());
+    assertThat(generator.getSequenceName(), is("MY_TABLE_SEQ"));
+  }
+
+}

