2010-06-17 10 views
7

Tutti i miei soggetti utilizzano questo tipo di @IdPerché una sequenza denominata hibernate_sequence viene creata con JPA utilizzando Hibernate con il dialetto Oracle 10g?

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MYENTITY_SEQ") 
@SequenceGenerator(name = "MYENTITY_SEQ", sequenceName = "MYENTITY_SEQ") 
@Column(name = "MYENTITY", nullable = false) 
private Long id; 

o

@Id 
@Column(name = "MYENTITY") 

Trovo che una sequenza di Oracle chiamato hibernate_sequence viene sempre creato. Perché è così? E come posso evitare questo?

Sto usando JPA1 con Hibernate 3 e il dialetto Oracle 10g.

+1

Sei sicuro non si dispone di alcun @ id dell'Ente annotato con @GeneratedValue() senza nessun attributo dichiarato ??? –

risposta

-3

Ho il sospetto che sia perché sto usando Hibernate Envers perché ho ricontrollato le mie entità e tutte hanno le mappature @Id corrette.

+4

e qual'era la soluzione? – cachiama

4

vedo il seguente codice nel org.hibernate.id.SequenceGenerator:

public void configure(Type type, Properties params, Dialect dialect) throws MappingException { 
    ObjectNameNormalizer normalizer = (ObjectNameNormalizer) params.get(IDENTIFIER_NORMALIZER); 
    sequenceName = normalizer.normalizeIdentifierQuoting(
      PropertiesHelper.getString(SEQUENCE, params, "hibernate_sequence") 
    ); 
    parameters = params.getProperty(PARAMETERS); 

    if (sequenceName.indexOf('.') < 0) { 
     final String schemaName = normalizer.normalizeIdentifierQuoting(params.getProperty(SCHEMA)); 
     final String catalogName = normalizer.normalizeIdentifierQuoting(params.getProperty(CATALOG)); 
     sequenceName = Table.qualify(
       dialect.quote(catalogName), 
       dialect.quote(schemaName), 
       dialect.quote(sequenceName) 
     ); 
    } 
    else { 
     // if already qualified there is not much we can do in a portable manner so we pass it 
     // through and assume the user has set up the name correctly. 
    } 

    this.identifierType = type; 
    sql = dialect.getSequenceNextValString(sequenceName); 
} 

Dove il terzo parametro della PropertiesHelper.getString(String, Properties, String) è il valore della proprietà di default.

Quindi sono tentato di dire che, da qualche parte, si ha un Id non "correttamente" annotato. Forse dovresti eseguire una piccola sessione di debug.

Problemi correlati