salut tout le monde

je suis en train de devenir dingue à cause d'une ENUM que j'ai dans Postgres que j'essaie de mapper sur une ENUM Java

Quand je fais un select dans la table, mon entité récupère bien l'élément de l'énumération mais quand j'essaie de persister Postgres retourne une erreur

ERREUR: l'opérateur n'existe pas : cb_def.study_status = character varying
J'utilise JPA en passant par EclipseLink et pour tout un tas de raisons je ne souhaite pas retourner vers Hibernate

j'ai bien essayé cette méthode mais ça ne fonctionne pas mieux

quelqu'un aurait une idée ?

voici mon entité :

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
import java.io.Serializable;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
 
import com.persistence.def.StudyStatus;
 
/**
 * Entité faisant le lien avec la table cb_id.study de la base de données centrale.
 * 
 */
@Entity
@Table(name="cb_id.study")
public class Study implements Serializable {
 
  private static final long serialVersionUID = 1L;
 
  private Integer pk = null;
  private String name = null;
  private StudyStatus currentStatus = null;
 
  @Id
  @GeneratedValue(
    strategy=GenerationType.SEQUENCE, 
    generator="cb_id.study_study_pk_seq"
  )
  @SequenceGenerator(
    name="cb_id.study_study_pk_seq", 
    sequenceName="cb_id.study_study_pk_seq", 
    allocationSize=1
  )
  @Column(name="study_pk")
  public Integer getPk() { return pk; }
  public void setPk(Integer pk) { this.pk = pk; }
 
  @Column(name="study_name")
  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
 
  @Column(name="current_study_status")
  @Enumerated(EnumType.STRING)
  public StudyStatus getCurrentStatus() { return currentStatus; }
  public void setCurrentStatus(StudyStatus status) { this.currentStatus = status; }
 
  public Study(Integer pk, String name, StudyStatus status) {
    this.pk = pk;
    this.name = name;
    this.currentStatus = status;
  }
 
  public Study() {
 
  }
 
  @Override
  public String toString() {
    return "("+pk+", "+name+", "+currentStatus.toString()+")";
  }
 
}
mon énumération Java :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
/**
 * Enumération des défintions contenues dans l'énumération cb_def.study_status de la base de 
 * données centrale.
 * 
 */
public enum StudyStatus {
 
  ongoing, 
  locked;
 
}
mon code SQL :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE TYPE cb_def.study_status AS ENUM (
  'ongoing', 
  'locked'
);
 
CREATE TABLE cb_id.study (
  study_pk                  SERIAL,
  study_name                VARCHAR(255) NOT NULL,
  current_study_status      cb_def.study_status NOT NULL,
  PRIMARY KEY(study_pk),
  UNIQUE(study_name)
);