@DatabaseField(dataType=DataType.ENUM_STRING,columnName=TIPO_FIELD_NAME)
private TipoPedido tipo;
public enum TipoPedido {
REGISTARNOTIFICACAORESPOSTA("Registar Notificação Resposta",SIGLA_TIPO_REGISTARNOTIFICATIORESPOSTA);
private String tipoName;
private String tipoValue;
TipoPedido(String tipoName,String tipoValue){
this.tipoName=tipoName;
this.tipoValue=tipoValue;
}
public String getTipoName(){
return tipoName;
}
public String getTipoValue(){
return tipoValue;
}
}
序数の代わりにtipoValue列挙型プロパティを列の値として使用することは可能ですか?
編集:これが私がしたことです:
MyEnumPersisterクラスを作成しました。
public class MyEnumPersister extends EnumStringType{
private static final MyEnumPersister singleTon = new MyEnumPersister();
/**
* @param sqlType
* @param classes
*/
protected MyEnumPersister() {
super(SqlType.STRING, new Class<?>[] { Enum.class });
}
public static MyEnumPersister getSingleton() {
return singleTon;
}
@Override
public Object javaToSqlArg(FieldType fieldType, Object obj) {
return ((EstadoPedido)obj).getEstadoValue();
}
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos)
throws SQLException {
return PedidoDTO.siglaEstadoPedidoComparator((String)sqlArg);
}
}
javatoSqlArgでは、列挙型内のゲッターを使用して、estadoValueに対応する文字列を直接返します。データベースから列挙型に戻すことを想定していますが、sqlArgToJavaメソッドも実装する必要がありますが、まだビルドしていません。
edit2:データを保持するテーブルに対してクエリを実行すると、メソッドjavaToSqlArgがsqlArgToJavaの前に呼び出されるようです。なぜですか?クエリは次のとおりです。
public List<PedidoDTO> getPendingRequests(){
List<PedidoDTO> pendingReq=null;
QueryBuilder<PedidoDTO, Integer> queryBuild=null;
try {
queryBuild=getHelper().getPedidosDao().queryBuilder();
pendingReq=queryBuild.where().eq(PedidoDTO.ESTADO_FIELD_NAME, PedidoDTO.SIGLA_ESTADO_PENDENTE).query();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pendingReq;
}
obj値は「P」として表示されます。これは、データベースに挿入したときにsqlに変換したものです。あまり意味がありません...