2010-05-25 59 views
0

如何爲下表定義一個實體。我有一些不起作用的東西,我只想看看我應該做什麼。休眠自動增量設置

USE [BAMPI_TP_dev] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[MemberSelectedOptions](
    [OptionId] [int] NOT NULL, 
[SeqNo] [smallint] IDENTITY(1,1) NOT NULL, 
[OptionStatusCd] [char](1) NULL 
) ON [PRIMARY] 

GO 
SET ANSI_PADDING OFF 

這就是我已經沒有工作。

@Entity 
@Table(schema="dbo", name="MemberSelectedOptions") 
public class MemberSelectedOption extends BampiEntity implements Serializable { 

    @Embeddable 
    public static class MSOPK implements Serializable { 
     private static final long serialVersionUID = 1L; 

     @Column(name="OptionId") 
     int optionId; 

     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     @Column(name="SeqNo", unique=true, nullable=false) 
     BigDecimal seqNo; 

     //Getters and setters here... 

} 

    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    MSOPK pk = new MSOPK(); 

    @Column(name="OptionStatusCd") 
    String optionStatusCd; 

    //More Getters and setters here... 
} 

我收到以下ST。

[5/25/10 15:49:40:221 EDT] 0000003d JDBCException E org.slf4j.impl.JCLLoggerAdapter error Cannot insert explicit value for identity column in table 'MemberSelectedOptions' when IDENTITY_INSERT is set to OFF. 
[5/25/10 15:49:40:221 EDT] 0000003d AbstractFlush E org.slf4j.impl.JCLLoggerAdapter error Could not synchronize database state with session 
          org.hibernate.exception.SQLGrammarException: could not insert: [com.bob.proj.ws.model.MemberSelectedOption] 
          at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) 
          at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
          at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2285) 
          at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2678) 
          at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79) 
          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:167) 
          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:1028) 
          at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366) 
          at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) 
          at com.bcbst.bamp.ws.dao.MemberSelectedOptionDAOImpl.saveMemberSelectedOption(MemberSelectedOptionDAOImpl.java:143) 
          at com.bcbst.bamp.ws.common.AlertReminder.saveMemberSelectedOptions(AlertReminder.java:76) 
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 

回答

0

不能對組合鍵使用發電機

0

看來,你的問題不是一個休眠的問題:

  • 也許你已經定義了「的SeqNo」的值,然後設法保存它

  • 還是在設計查看您的數據庫,您應確保您將「IDENTITY」屬性設置爲「是」列「SeqNo」

你應該在你的代碼後,在執行此操作:

集IDENTITY_INSERT dbo.MemberSelectedOptions ON

+0

我不想要插入身份,我想字段在數據庫端自動增量。我怎麼能告訴休眠不插入/更新SeqNo列的值?我試過updateable/insertable = false。這是行不通的。 – dharga 2010-05-25 21:02:24

+0

好吧,對不起,誤解, Juste多一個問題,你可以在數據庫中插入一個插入,而不指定SeqNo嗎? – rasata 2010-05-26 19:56:15