7.4.4.2. 自定义网桥
有时,Hibernate Search 的内置网桥不涵盖某些属性类型,或者网桥使用的字符串表示不满足您的要求。以下段落描述了此问题的几种解决方案。
7.4.4.2.1. StringBridge 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
最简单的自定义解决方案是让 Hibernate 搜索您的预期对象实施到 String 网桥。为此,您需要实施 org.hibernate.search.bridge.StringBridge 接口。所有实施都必须是并发使用线程安全。
示例:自定义字符串实现
/**
* Padding Integer bridge.
* All numbers will be padded with 0 to match 5 digits
*
* @author Emmanuel Bernard
*/
public class PaddedIntegerBridge implements StringBridge {
private int PADDING = 5;
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();
}
}
根据上例中定义的字符串网桥,任何属性或字段都可通过 @FieldBridge 注释来使用此网桥:
@FieldBridge(impl = PaddedIntegerBridge.class)
private Integer length;