2012-10-12 2 views
2

J'utilise à la fois les annotations Hibernate et Sybase. Je cherche à installer une colonne de version pour empêcher le verrouillage. La base de données doit administrer l'horodatage plutôt que l'application. Je voudrais accomplir cela en utilisant des annotations plutôt que hbm.xml.Version d'horodatage Hibernate contrôlée par la base de données.

J'ai essayé ce qui suit sans succès,

Je lis sur jboss.org à utiliser

@org.hibernate.annotations.SourceType.DB 
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS) 

mais je reçois une erreur de compilation IDE pour DB, « ne peut pas trouver le symbole symbole: classe DB lieu: classe SourceType »

et une erreur de compilation pour rowversion,

Le champ Version ou la propriété ne fait pas partie des types pris en charge. Assurez-vous qu'il s'agit de l'un des types suivants: int, Integer, short, Short, long, Long, java.sql.Timestamp.

Un attribut temporel doit être marqué avec l'annotation @Temporal.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#d0e5785

5.1.3.2. Timestamp

Exemple de code

@Version 
@org.hibernate.annotations.SourceType.DB 
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS) 
@Column(name = "row_version") 
private Date rowVersion; 

public Date getRowVersion() { 
    return rowVersion; 
} 

public void setRowVersion(Date rowVersion) { 
    this.rowVersion = rowVersion; 
} 

Quelqu'un pourrait-il me dire ce que je suis absent?

Répondre

3

Ce n'est pas une annotation, mais un champ d'un ENUM:

@org.hibernate.annotations.SourceType.DB 

Vous avez besoin ceci sur votre domaine:

@Version 
@org.hibernate.annotations.Source(SourceType.DB) 
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS) 
@Column(name = "row_version") //maybe unnecessary, because this annotation 
           //is only needed, if the column name does not 
           //match hibernate's default naming strategy 
           //(or custom strategy). 
@Temporal(TemporalType.TIMESTAMP) 
private Date rowVersion; 
+0

Merci, une dernière question, comment gérez-vous la date datatype . L'EDI veut que je l'utilise Un attribut temporel doit être marqué avec l'annotation temporelle –

+0

Quelle heure dois-je utiliser avec ceci? –

+0

Ajoutez simplement l'annotation Temporelle au champ. (comme Version par exemple) – Markus

Questions connexes