2013-03-07 75 views
0

我一直在试图获得工作在休眠状态的idbag。我一直在试图对付MySql DB和HSQLDB,并且我也尝试过几种不同版本的Hibernate。 Hibernate 4和Hibernate 3给出了与错误原因稍有不同的信息,但两者在主要内容中都表达了相同的内容:Class Cast Exception。idBag生成器类抛出异常

我将所有代码托管在公共库中的bitbucket上,并且所有内容都包含用于创建MySql或HSQL DB的DDL以及相关表。我的HSQLDB版本是2.2.9,MySql版本是5.1.66 - 我的首选是让它在MySql上运行。

Git的clone命令: 混帐克隆https://[email protected]/pphi/idbag.git

网页: https://[email protected]/pphi/idbag.git

当使用Hibernate 4.0.1我得到这个堆栈跟踪:

Hibernate: insert into idBagTest.Team (nickname, mascot) values (?, ?) 
Hibernate: insert into idBagTest.Famous_Fan (first_name, last_name) values (?, ?) 
Hibernate: insert into idBagTest.famous_fan_team (Team_id, team_fan_id, Famous_Fan_id) values (?, ?, ?) 
Exception in thread "main" java.lang.ClassCastException: org.hibernate.id.IdentifierGeneratorHelper$2 cannot be cast to java.lang.Long 
    at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36) 
    at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:57) 
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.writeIdentifier(AbstractCollectionPersister.java:919) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1252) 
    at org.hibernate.action.internal.CollectionRecreateAction.execute(CollectionRecreateAction.java:58) 
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354) 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:279) 
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326) 
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) 
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1213) 
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:402) 
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101) 
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175) 
    at com.intertech.dao.TeamDaoHibernateImpl.saveTeam(TeamDaoHibernateImpl.java:19) 
    at com.intertech.Main.main(Main.java:22) 

当使用Hibernate的3.1我得到这个略有不同的堆栈轨迹:

Hibernate: insert into Team (id, nickname, mascot) values (null, ?, ?) 
Hibernate: insert into Famous_Fan (id, first_name, last_name) values (null, ?, ?) 
Hibernate: insert into famous_fan_team (Team_id, team_fan_id, Famous_Fan_id) values (?, ?, ?) 
5120 [main] INFO org.hibernate.type.LongType - could not bind value 'POST_INSERT_INDICATOR' to parameter: 2; org.hibernate.id.IdentifierGeneratorFactory$2 cannot be cast to java.lang.Long 
Exception in thread "main" java.lang.ClassCastException: org.hibernate.id.IdentifierGeneratorFactory$2 cannot be cast to java.lang.Long 
    at org.hibernate.type.LongType.set(LongType.java:65) 
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154) 
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.writeIdentifier(AbstractCollectionPersister.java:829) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1160) 
    at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58) 
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) 
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171) 
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) 
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) 
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) 
    at com.intertech.dao.TeamDaoHibernateImpl.saveTeam(TeamDaoHibernateImpl.java:19) 
    at com.intertech.Main.main(Main.java:22) 

回答

0

https://hibernate.onjira.com/browse/HHH-397

在idBag发电机类的用途的身份使用MySQL和Hibernate时显然不支持。以增量替代发电机类,并得到这个:

休眠:插入idBagTest.Team(昵称,吉祥物)值 休眠(?,?):插入idBagTest.Famous_Fan(名字,姓氏)值(?,? ) 休眠:从idBagTest.Famous_Fan_Team 选择MAX(team_fan_id)休眠:插入idBagTest.Famous_Fan_Team(TEAM_ID,team_fan_id,Famous_Fan_id)值(,)

资源库已更新,工作代码???

0

我已经跨越了同样的错误来了,

经过一番研究,我来到了结论,这是取决于两个因素。

  1. 你使用的是什么DB加
  2. 什么@GenericGenerator - 你所使用的策略。

我能够通过以下配置解决问题。 -

  1. DB的MySQL
  2. 更改策略,从原生

我的代码看起来像递增: @ElementCollection @JoinTable(NAME = “USERS_ADDRESSES”,joinColumns = @ JoinColumn(NAME =” USER_ID“)) @GenericGenerator(name =”hilogen“,strategy =”increment“) @CollectionId(columns = {@ Column(name =”ADDR_ID“)},generator =”hilogen“,type = @ Type(type =“long”)) private List addressList = new ArrayList();

希望得到这个帮助。

谢谢, Sagar Vyas