2017-09-17 20 views
0

Ich habe eine Klasse mit einigen Feldern, einer davon ist SimpleObject Typ, der entsprechenden Wert von Aufzählungstyp (siehe unten) hält. Wie kann ich dieses Feld (bloodType) in der Datenbank speichern, aber als ObjectProperty<BloodType> nicht enum? Ich kann den Typ der Variablen nicht ändern, um aufzulisten, weil ich die Fähigkeit verlieren werde, es in TableView zu beobachten.Enum mit PropertyObject im Hibernate und JavaFX

Ich habe versucht, es mit @Embadded zu kommentieren, aber es scheint, dass es nur für Klassen funktioniert.

Nach meinem Code ausführen ich recive eine Ausnahme:

Caused by: org.hibernate.AnnotationException: Attribute [model.Patient.bloodType] was annotated as enumerated, but its java type is not an enum [java.lang.Object] 

Klasse Patient:

@Entity 
@Table(name = "Donors") 
@Access(AccessType.PROPERTY) 
class Patient 
{ 

     (...) 
     @Column(name="Blood_Type") 
     private ObjectProperty<BloodType> bloodType = new SimpleObjectProperty<BloodType>(); 

     @Enumerated(EnumType.STRING) 
     public Object getBloodTye() { 
      return bloodType.get().toString(); 
     } 
     public void setBloodTye(Object bloodType) { 
      this.bloodType.set((BloodType) bloodType); 
     } 

} 

Und Aufzählungstyp:

public enum BloodType { 
A_PLUS, 
A_MINUS, 
AB_PLUS, 
AB_MINUS, 
B_PLUS, 
B_MINUS, 
} 

Antwort

0

Sie benötigen einen Rückgabetyp festlegen, ist ein Enum-Typ. Ihr Getter/Setter wird jedoch so geschrieben, als wäre die Eigenschaft vom Typ Object. Ändern Sie diese Einstellung in BloodType.

Beachten Sie, dass es sowieso extrem schlecht ist. Dies kann nur zu ClassCastException s führen. Sie haben sie nicht einmal dokumentiert, und es ist einfach, sie zu verhindern, indem Sie BloodType als den Typ verwenden. Hibernate behandelt die Konvertierung vom Aufzählungstyp zu String sowieso.

@Entity 
@Table(name = "Donors") 
@Access(AccessType.PROPERTY) 
class Patient 
{ 

    (...) 
    private ObjectProperty<BloodType> bloodType = new SimpleObjectProperty<>(); 

    @Enumerated(EnumType.STRING) 
    @Column(name="Blood_Type") 
    public BloodType getBloodType() { 
     return bloodType.get(); 
    } 
    public void setBloodType(BloodType bloodType) { 
     this.bloodType.set(bloodType); 
    } 

}