28

これを尋ねるのは少しばかげているように感じますが、質問に対する簡単な答えが見つかりません。

例として、この単純なエンティティを取り上げます。

@Entity
@Table( name="clienti" )
public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    private String nome;

    private String cognome;

//...
}

人を表しているので、「性別」プロパティを追加したいと思います。

「男」か「女」になります。だから何?

String を使用できますが、"m" は男性を表し、"f" は女性を表すことに注意してください。

または、ブール値の「isMale」、true または false を使用できます。

ただし、どちらの場合も、Hibernate の純粋主義者が満足するとは思いません :)

少しグーグルで調べてみると、ベストプラクティスはenumを使用することであることがわかりました。

使い方に少し戸惑います。例を教えてください。

4

2 に答える 2

50

enumStringまたは序数にマップできます。マッピングStringは列挙順序を変更しても存続するため、へのマッピングはより移植性の高いアプローチです。

あなたの例を使用して:

@Entity
@Table( name="clienti" )
public class Cliente implements Serializable {

...
    @Enumerated(EnumType.STRING)
    private Gender gender;
...
}

文字列マッピングでは列挙型の単純な名前が使用されるため、DBには「男性」と「女性」の2つの可能な値があります。

public enum Gender { MALE, FEMALE }

永続性プロバイダーがマッピングを処理するため、コードでGender列挙型を引き続き使用でき、文字列や序数について心配する必要はありません。

于 2013-01-21T12:43:59.853 に答える