我能够通过创建一个id-
long类型来解决此问题,该类型扩展了内置的Long类型,但是如果从SQL返回的id为0,则返回null。这样,在进入hibernate状态以停止进行懒惰提取时,DB中保留了默认的0。
public class IdentifierLongType extends LongType implements IdentifierType {@Overridepublic Object get(ResultSet rs, String name) throws SQLException { long i = rs.getLong(name); if (i == 0) { return null; } else { return Long.valueOf(i); }}}
强制使用显式默认0的原因是Oracle奇怪地处理了索引和空值,这表明显式值与“ where col is [not] null”相比具有更好的查询性能。



