2012-03-07 10 views
2

使用:hibernate 3.6.2、maven 2、postgres 9. 私は動作する必要がありますが、動作しないコードがあります。 。java.lang.ClassCastException:org.hibernate.action.DelayedPostInsertIdentifierはjava.lang.Longにキャストできません

とjava.lang.ClassCastException:org.hibernate.action.DelayedPostInsertIdentifierは

コードは、スタンダールのドメインモデルであるがjava.lang.Longにキャストすることはできません。

私は機能テストを起動すると、私はエラーを持っています

エンティティ:

@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) 
@Entity 
@Table(schema = "simulators", name = "mySimulator_card") 
public class MySimulatorCard { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name = "account_number", unique = true, nullable = false) 
    private String accountNumber; 

等...

DAO:

public abstract class AbstractDao<E, PK extends Serializable> implements Dao<E, PK> { 

    private EntityManager entityManager; 

    public EntityManager getEntityManager() { 
     return entityManager; 
    } 

    @PersistenceContext(unitName = "MySimulator") 
    public void setEntityManager(EntityManager entityManager) { 
     this.entityManager = entityManager; 
    } 

    public abstract Class<E> getEntityClass(); 

    @Override 
    public void persist(E e) { 
     getEntityManager().persist(e); 
    } 

    @Override 
    public E merge(E e) { 
     return getEntityManager().merge(e); 
    } 

    @Override 
    public void refresh(E e) { 
     getEntityManager().refresh(e); //<-- some thing wroooong 
    } 

    @Override 
    public void delete(E e) { 
     getEntityManager().remove(e); 
    } 

等...

とテーブルに従って:

at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36) 
     at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:52) 
     at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91) 
     at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282) 
     at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277) 
     at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1873) 
     at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1844) 
     at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:801) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
     at org.hibernate.loader.Loader.loadEntity(Loader.java:2037) 
     at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86) 
     at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76) 
     at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3293) 
     at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:151) 
     at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:62) 
     at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:1118) 
     at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:1098) 
     at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:738) 
     at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:713) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365) 
     at $Proxy153.refresh(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) 
     at $Proxy82.refresh(Unknown Source) 
     at com.goooogle.simulator.mysimulator.dao.AbstractDao.refresh(AbstractDao.java:42) 

理由:ここで

CREATE TABLE simulators.mySimulator_card 
(
    id bigserial NOT NULL, 
    account_number character varying(255) NOT NULL, 

etc... 

    CONSTRAINT mySimulator_card_pk PRIMARY KEY (id), 
    CONSTRAINT mySimulator_card_account_fk FOREIGN KEY (account_id) 
     REFERENCES simulators.mySimulator_account (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT mySimulator_card_currency_fk FOREIGN KEY (currency_id) 
     REFERENCES simulators.mySimulator_currency ("name") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT mySimulator_card_product_fk FOREIGN KEY (product_id) 
     REFERENCES simulators.mySimulator_product (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT mySimulator_account_account_number_uq UNIQUE (account_number), 
    CONSTRAINT mySimulator_card_san_uq UNIQUE (san) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE simulators.mySimulator_card OWNER TO functional; 

は私のコードまでトレースをスタックしていますか?休止状態のバグですか?

答えて

0

あなたは上のIDENTITYとしてあなたの主キーを定義していませんでしたあなたのcreate tableステートメント

id bigserial NOT NULL IDENTITY 
+0

私はpostgresの指導者ではありませんが、postgreSQLにはキーワードアイデンティティはありません。私はあなたの例を使用することはできません。 –

+0

シーケンスを作成してみてください。 CREATE SEQUENCE sq; CREATE TABLE t_test( ID整数プライマリキーデフォルトNEXTVAL( 'sq')、 名前VARCHAR(10) ); INSERT INTO t_test(name) VALUES( 'Andrew'); INSERT INTO t_test(名前) VALUES( 'Gordon'); SELECT * FROM t_test; –

+0

これをチェック:http://sqlzoo.net/howto/source/z.dir/tip000001/postgres –

1

私はsave()を実行するときと全く同じ例外に直面しました。 hibernateマッピングファイルのカスケードオプションを修正して解決しました。私はそれを「すべての削除、孤立、保存更新、削除」から「保存 - 更新、削除、削除 - オーファン」に変更してくれました。 お手伝いをしてください。

関連する問題