如何强制Hibernate返回空值而不是null?

我正在使用Oracle 11GR2,当varchar2字段为空时,在空字段上执行System.out.println将在我的Eclipse控制台上显示null 。 我怎样才能让它显示空字符串呢?

你的getter方法:

 public String getVarchar2() { if(this.varchar2==null) return ""; else return this.varchar2; } 

在getter中做这个技巧很好,但它改变了模型的期望行为。

正如我在评论中引用的那样,Oracle无法区分空字符串和null。 如果你确定你使用的所有字符串属性永远不会为null,你可以像这样在hibernate中创建一个拦截器

 public class EmptyStringInterceptor extends EmptyInterceptor { @Override public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { for (int i = 0; i < types.length; i++) { if (StringType.equals(types[i]) && state[i] == null) { state[i] = ""; } } return true; } } 

您可以参考Hibernate的文档来使用拦截器

如果要更改所有字符串的行为,拦截器是可行的方法。 Oracle内部将空字符串视为null( '' is null返回true),但这可能不适用于其他数据库。 对于它们,您应该覆盖onFlushDirtyonSave方法,以便在数据库中不使用null (或者如果您愿意,也可以始终使用它们):

 public class MPSessionInterceptor extends EmptyInterceptor { @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { return convertEmptyStrings(currentState, types); } @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { return convertEmptyStrings(state, types); } @Override public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { return convertEmptyStrings(state, types); } private boolean convertEmptyStrings(Object[] state, Type[] types) { // convert nulls to empty strings boolean modified = false; for (int i=0; i 

您可以参考Hibernate的文档来使用拦截器