Hibernate2和3中关于sequence的配置区别
hbm映射文件中的配置:
??????? <id
??????????????? name="id"
??????????????? column="id"
??????????????? type="string"
????? ??????????length="20"
??????????????? unsaved-value="null"
??????????????? >
??????????? <generator style="margin: 0cm 0cm 0pt; text-align: left;">??????????????? <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