2017-09-17 9 views
0

いくつかのフィールドを持つクラスがあります。そのうちの1つはSimpleObjectタイプで、enumタイプの適切な値を保持します(下を参照)。このフィールド(bloodType)はどのようにデータベースに保存できますか?ObjectProperty<BloodType>enumではありませんか?私はTableViewでそれを観察する能力を失うため、変数の型をenumに変更できません。HibernateとJavaFXでPropertyObjectを持つEnum

@Embaddedで注釈を付そうとしましたが、クラスに対してのみ動作するようです。あなたは戻り値の型を指定する必要が

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

答えて

0

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

クラスの患者:

@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); 
     } 

} 

そして、列挙型の

は私のコードを実行した後、私は例外をrecive列挙型。しかし、あなたのゲッタ/セッターは、そのプロパティがタイプObjectであるかのように書かれています。これをBloodTypeに変更します。

とにかくそれは非常に悪い習慣であることに注意してください。これはちょうどClassCastExceptionにつながる可能性があります。あなたはそれらを文書化しておらず、タイプとしてBloodTypeを使用することでそれらを防ぐのは簡単です。 Hibernateは、列挙型からStringへの変換を処理します。

@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); 
    } 

} 
関連する問題