14.2.4.2.4. Two-Way Bridge
id プロパティー (
@DocumentId
アノテーション付き) でブリッジ実装を使用する必要がある場合は、TwoWayStringBridge
という名前の拡張バージョン StringBridge
を使用する必要があります。Hibernate Search は、識別子の文字列表現を読み取り、そこからオブジェクトを生成する必要があります。@FieldBridge
アノテーションの使用方法には違いがありません。
例14.27 id プロパティーに使用できる TwoWayStringBridge の実装
public class PaddedIntegerBridge implements TwoWayStringBridge, ParameterizedBridge {
public static String PADDING_PROPERTY = "padding";
private int padding = 5; //default
public void setParameterValues(Map parameters) {
Object padding = parameters.get( PADDING_PROPERTY );
if (padding != null) this.padding = (Integer) padding;
}
public String objectToString(Object object) {
String rawInteger = ( (Integer) object ).toString();
if (rawInteger.length() > padding)
throw new IllegalArgumentException( "Try to pad on a number too big" );
StringBuilder paddedInteger = new StringBuilder( );
for ( int padIndex = rawInteger.length() ; padIndex < padding ; padIndex++ ) {
paddedInteger.append('0');
}
return paddedInteger.append( rawInteger ).toString();
}
public Object stringToObject(String stringValue) {
return new Integer(stringValue);
}
}
//id property
@DocumentId
@FieldBridge(impl = PaddedIntegerBridge.class,
params = @Parameter(name="padding", value="10")
private Integer id;
重要
双方向プロセスがべき等 (例: object = stringToObject( objectToString( object ) ) ) であることが重要です。