首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate2跟3中关于sequence的配置区别

2012-11-06 
Hibernate2和3中关于sequence的配置区别hbm映射文件中的配置:??????? id??????????????? nameid??????

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

热点排行