Je joue un peu avec JPA (Eclipselink pour être précis). L'entité ci-dessous a un horodatage censé refléter chaque fois que cette entité a été mise à jour pour la dernière fois.Dernière mise à jour de l'horodatage avec JPA
Quelles sont les stratégies pour faire la mise à jour JPA cet horodatage automatiquement chaque fois que cette entité est modifiée?
Comment pourrais-je aller sur si je veux aussi un horodatage « de création », définissez uniquement lorsque l'entité est d'abord persisté, jamais permis à changer à nouveau?
@Entity
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String note;
public Item() {
}
@Id
@GeneratedValue(strategy=SEQUENCE)
@Column(unique=true, nullable=false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=255)
@Column(nullable=false)
public String getNote() {
return this.note;
}
public void setNote(String note) {
this.note = note;
}
@Column(nullable=false)
public Timestamp getUpdated() {
return this.updated;
}
public void setUpdated(Timestamp updated) {
this.updated = updated;
}
}
Ceci est faux pour plusieurs raisons: (1) précède suppose que vous mettez à jour manuellement l'horodatage créant ainsi « actualisable » est inutile; (2) par conséquent, ce qui précède ne fonctionnera pas sans les auditeurs d'événements @PreUpdate/@PrePersist; (3) si vous voulez que la base de données génère vos horodatages (ce que vous semblez impliquer), vous devez marquer vos propriétés comme générées qui ne sont pas ** en norme JPA; (4) Enfin, MySQL ne vous laissera pas 2 timestamps mis à jour automatiquement dans la même table. – ChssPly76
En ce qui concerne mysql, vous pouvez créer un ou plusieurs déclencheurs pour mettre à jour n'importe quel nombre de colonnes, comme un horodatage - vous n'êtes pas limité à 1 horodatage mis à jour automatiquement dans une table. – nos
dans MySQL vous pouvez également créer une table avec 2 horodatages et insérer NULL sur les deux champs lors de l'insertion d'un enregistrement. créer une table ts ( last_updated_ts TIMESTAMP, created_ts TIMESTAMP, nom varchar (5)); insert dans ts (last_updated_ts, created_ts, name) valeur (null, null, 'test'); Le déclenchement ou l'annotation est certainement meilleur selon la façon dont le client accède à la base de données. – surajz