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 :
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;
	}
 
}
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
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);
	}
 
}
et ma propriété dans mon Entity :
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;
Paur sauver mon enum pas de soucis !
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