2012-02-29 11 views
0

私は通常noobの質問を投稿しませんが....私はプログラミングを始めてから何かが足りなくなっています。"バイナリ"のデータ型について

いくつかのプロパティの名前、説明などを持つpojoエンティティオブジェクトを想像してみましょう。これらのうちの1つは、「IN」または「OUT」のみである「方向」です。

そのプロパティにはどのような種類のデータが最適ですか? 私はブール値を使うことができます。例えば、trueをin、falseをoutとして仮定します。または、私は単一のchar 'I'と 'o'、または 'enum'を使用できます。

このオブジェクトを休止状態で使用します。プロパティはテーブルの列に移動します。だから...列のための最良のデータ型は何ですか?

は、私は enumは、この目的のために最も適していると思う

+0

はhttp://stackoverflow.com/questions/135845/are-を参照してください。ブーリアンをメソッド引数として受け入れられない – skaffman

答えて

2

私はEnumを提案します。

利点:

  • あなたは(それが必要になった)後で 上の変数の可能な値のセットを拡張することができます。
  • 値の名前には、値のセマンティクスに関する重要な意味があります。
  • プログラミング言語がタイプチェックに役立ちます。あなたが列挙値の記述名を使用する必要があります意味
  • もちろん

に、...

2

ありがとうございます。

public enum STATE {IN, OUT} 

いつでもデータベースに保存する文字列を取得できます。

1

私はenumを使用して、データベーステーブルにStringに変換列挙値を格納します。 詳細についてはJava Enumsに関する記事をお読みください。

1

あなただけのchar型を使用して列を設定し、あなたがあなたのデシベルで、あなたのエンティティ内にHibernate/JPAとchar型の列にバインドすることができます方向に

public enum Direction { 
    IN('i'), OUT('o'); 

    final char dir; 
    Direction(char dir) { 
     this.dir = dir; 
    } 

    public static Direction find(char c) { 
     for (Direction d : Direction.values()) { 
      if (d.dir == c) 
       return d; 
     } 
     throw new IllegalArgumentException("Not found: " + c); 
    } 
} 

を表すために列挙型を持っているし、公開することができますgetter/setterであなたの列挙型のみ。

@Entity 
public class MyEntity { 
    @Column 
    private char direction; 

    public Direction getDirection() { 
     return Direction.find(direction); 
    } 

    public void setDirection(Direction dir) { 
     this.direction = dir.dir; 
    } 
} 
+0

私はそれに興味があります:あなたのコードでは暗黙の変換ですか?それは単にそのように機能するのでしょうか? :) –

+0

データベースは列挙型について知らず、単に文字(列挙型の内部表現)を格納します。しかし、あなたのコード内では、エンティティはenumを公開し、内部表現は公開しません。そう、それはそのように動作します – Alex

1

enumを使用してください。休止状態では、次のマッピングを使用することができ、それが自動的に/ DBから取得し保存するために列挙値の名前を使用します。

 <type name="org.hibernate.type.EnumType"> 
      <param name="enumClass">foo.MyEnum</param> 
      <!-- 12 == java.sql.Types.VARCHAR --> 
      <param name="type">12</param> 
     </type>