2010-05-25 4 views
0

Comment définir une entité pour le tableau suivant. J'ai quelque chose qui ne fonctionne pas et je veux juste voir ce que je suis censé faire.Configuration de l'incrémentation automatique Hibernate

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 

C'est ce que j'ai déjà qui ne fonctionne pas.

@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... 
} 

Je reçois les 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) 

Répondre

0

Vous ne pouvez pas utiliser des générateurs sur les touches composites

0

Il semble que votre problème n'est pas un problème de mise en veille prolongée:

  • Peut-être que vous avez défini une valeur pour « seqNo », puis essayé de la sauver

  • Ou dans la conception Dans la vue de votre base de données, vous devez vous assurer que vous avez défini la propriété "IDENTITY" sur "yes" pour la colonne "SeqNo"

Et vous devez le faire en exécutant ceci après votre code:

set identity_insert dbo.MemberSelectedOptions SUR

+0

je ne veux pas Pour insérer dans l'identité, je veux que le champ s'auto-incrémente du côté DB. comment puis-je dire à hibernate de ne pas insérer/mettre à jour les valeurs de la colonne SeqNo? J'ai essayé updateable/insertable = false. ça ne marche pas. – dharga

+0

ok, désolé pour la mauvaise compréhension, Juste une autre question, pouvez-vous juste faire un insert dans la base de données, sans spécifier le SeqNo? – rasata

Questions connexes