Bonjour a tous,
J'essaie désespérément d'utiliser les enum avec JPA 2.1 (j'utilise EclipseLink comme implementation, l'appli tourne sous Tomcat 7 et java 7).
J'ai suivi ce tutoriel :
http://www.nurkiewicz.com/2013/06/ma...h-convert.html
Mais pas moyen, rien a faire ça ne fonctionne pas, je m'explique, pour commencer voici mon code :
mon Enum :
mon Converter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public enum PaymentStatus { NOT_PAID("payment.status.notPaid"), PAID("payment.status.paid"), CANCELLED( "payment.status.cancelled"); private String code; PaymentStatus(String value) { this.code = value; } public String getCode() { return code; } }
et ma propriété dans mon Entity :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 import javax.persistence.AttributeConverter; import javax.persistence.Converter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.demkocompany.platform.core.enums.PaymentStatus; @Converter public class PaymentStatusConverter implements AttributeConverter<PaymentStatus, String> { private static final Logger LOG = LoggerFactory .getLogger(PaymentStatusConverter.class); @Override public String convertToDatabaseColumn(PaymentStatus attribute) { LOG.info("convertToDatabaseColumn = " + attribute.name()); return attribute.name(); } @Override public PaymentStatus convertToEntityAttribute(String dbData) { LOG.info("convertToEntityAttribute = " + dbData); return PaymentStatus.valueOf(dbData); } }
Paur sauver mon enum pas de soucis !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @Convert(converter = PaymentStatusConverter.class) @Column(name = "payment_status", length = 32) public PaymentStatus paymentStatus;
si je passe PaymentStatus.NOT_PAID j'ai bien la string "NOT_PAID" en base.
En revanche si je passe par exemple : PaymentStatus.CANCELLED
quand je lis ma propriété via son getter ( getPaymentStatus() )
je me retrouve avec "NOT_PAID" soit la 1ere valeur présente dans mon enum.
Si je regarde de plus près les logs je vois bien mon log dans la méthode convertToDatabaseColumn lorsque je sauvegarde, en revanche je vois pas celui dans la méthode convertToEntityAttribute lorsque je lis la proprété.
Si quelqu'un a une idée ?
ça le ferait bien car je suis bloquer depuis déjà quelques jours , je ne sais plus trop quoi essayer, ou si vous avez une alternative ?
Merci d'avance
Partager