hbm映射文件中的配置:
<id
name="id"
column="id"
type="string"
length="20"
unsaved-value="null"
>
<generator class="sequence">
<param name="sequence">t_ptvosp_order_model_seq</param>
</generator>
</id>
即id主键为string类型,但使用了sequence来自动生成主键。此时在hibernate2中报错,但hibernate3却没问题,为什么呢?
2中报错net.sf.hibernate.id.IdentifierGenerationException: this id generator generates long, integer, short,源码对比
2:
public static Serializable get(ResultSet rs, Type type, SessionImplementor session, Object owner) throws SQLException, IdentifierGenerationException {
Class clazz = type.getReturnedClass();
if ( clazz==Long.class ) {
return new Long( rs.getLong(1) );
}
else if ( clazz==Integer.class ) {
return new Integer( rs.getInt(1) );
}
else if ( clazz==Short.class ) {
return new Short( rs.getShort(1) );
}
else {
throw new IdentifierGenerationException("this id generator generates long, integer, short");
}
}
3:
public static Serializable get(ResultSet rs, Type type) throws SQLException, IdentifierGenerationException {
Class clazz = type.getReturnedClass();
if ( clazz == Long.class ) {
return new Long( rs.getLong( 1 ) );
}
else if ( clazz == Integer.class ) {
return new Integer( rs.getInt( 1 ) );
}
else if ( clazz == Short.class ) {
return new Short( rs.getShort( 1 ) );
}
else if ( clazz == String.class ) {
return rs.getString( 1 );
}
else {
throw new IdentifierGenerationException( "this id generator generates long, integer, short or string" );
}
}
即hibernate2不支持id使用string类型,且还使用sequence的情况。
解决:
1)id使用integer之类的数字类型
2)升级为hibernate3