JPA type-conversie
Hibernate biedt de mogelijkheid om een type-conversie te doen tussen database kolom-typen en de persistent object veld-typen m.b.v. UserTypes.
In JPA werkt de typeconversie anders.
JPA biedt twee annotaties die hierbij kunnen helpen, te weten @PrePersist en @PostLoad.
Deze annotaties worden respectievelijk voor het persisteren en na het ophalen van de entiteit uitgevoerd. Door deze annotaties te gebruiken wordt het mogelijk om bijvoorbeeld een database veld met type Integer naar de buitenwereld als String beschikbaar te stellen.
Een voorbeeld:
@Entity
@Table()
public class Voorbeeld {
@Id
private int id;
@Column
private Integer Bsn_internal;
private String Bsn;
public String getId() { return id; }
public String getBsn() { return Bsn; }
public void setBsn(final String argBsn) { this.Bsn = argBsn; }
@PrePersist
private void prepersist() {
this.Bsn_internal = Integer.parseInt(this.Bsn);
}
@PostLoad
private void postLoad() {
this.Bsn = this.Bsn_internal.toString();
}
}
In bovenstaand voorbeeld is te zien dat er een interne vorm van de kolominhoud wordt vastgehouden (Bsn_internal). Deze waarde wordt nooit aan de buitenwereld gegeven.
De interface om het Bsn te bewerken en opvragen is via de getter/setter van Bsn.
De prepersist method zorgt ervoor dat de aangepaste Bsn waarde wordt overgezet naar Bsn_internal voordat de entiteit ge-persist wordt. De postload zorgt ervoor dat bij een update van de entiteit automagisch de Bsn wordt bijgewerkt.
Dit voorbeeld houdt geen rekening met mogelijke problemen bij het parsen van de Integer. De ontwikkelaar dient ervoor te zorgen dat foutafhandeling wordt verzorgt.

Comments are closed.