lundi 13 juillet 2015

many-to-many table + generation primary key in varbinary

My database contains 3 tables: ARTICLE and INVENTAIRE entities have many-to-many relationship and are joined with the INVENTAIRE_ARTICLE table as follows:

INVENTAIRE

@Entity
@Table(name = "INVENTAIRE")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)

public class Inventaire implements Serializable{

    @Id
    @Column(name = "id_inventaire")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;


    @Column(name = "dateCreation", nullable = true)
     private Date dateCreation;


    @ManyToOne
    Operation operation;



    @OneToMany(fetch=FetchType.LAZY, mappedBy="pk.inventaire", cascade=CascadeType.ALL)
    Set<InventaireArticle> inventaireArticle = new HashSet<InventaireArticle>();



      public Set<InventaireArticle> getInventaireArticle() {
        return inventaireArticle;
    }

    public void setInventaireArticle(Set<InventaireArticle> inventaireArticle) {
        this.inventaireArticle = inventaireArticle;
    }

    public Date getDateCreation() {
        return dateCreation;
    }

    public void setDateCreation(Date dateCreation) {
        this.dateCreation = dateCreation;
    }

    public Operation getOperation() {
        return operation;
    }

    public void setOperation(Operation operation) {
        this.operation = operation;
    }

    public long getId() {
        return this.id;
      }

      public void setId(long id) {
        this.id = id;
      }

}

Article

 @Entity
    @Table(name = "ARTICLE" )
    public class Article  implements Serializable
    {
          private static final long serialVersionUID = 1L;

         @Id
         @Column(name = "id_article")
         @GeneratedValue(strategy = GenerationType.AUTO)
         private long id;

         @Column(name = "description", nullable = true)
         private String description;

         @Column(name = "designation",  nullable = true)
         private String designation;

         @Column(name = "observation", nullable = true)
         private String observation;

         @Column(name = "nserie", nullable = true)
         private String nserie;

         @Column(name = "marque", nullable = true)
         private String marque;

         @Column(name = "typecontenant", nullable = true)
         private String typecontenant;

        @Column(name = "rfid", nullable = true)
         private String rfid;


        @Column(name = "fournisseur", nullable = true)
         private String fournisseur;

         @Column(name = "codeAbarre", nullable = true)
         private String codeAbarre;

         @Column(name = "model", nullable = true)
         private String model;

         @Column(name = "consommation", nullable = true)
         private float consommation;


         @Column(name = "nbreunite", nullable = true)
         private int nbreunite;


         @Column(name = "idClient", nullable = true)
         private String idClient;

         @Column(name = "adresseIp", nullable = true)
         private String adresseIp;


         @Column(name = "dateExpiration", nullable = true)
         private Date dateExpiration;


         @Column(name = "dateSaisie", nullable = true)
         private Date dateSaisie;


         @Column(name = "dateAcquisition", nullable = true)
         private Date dateAcquisition;


         @Column(name = "prixAchat", nullable = true)
         private float prixAchat;


         @Column(name = "position", nullable = true)
         private String position; 



         @OneToMany(fetch=FetchType.LAZY, mappedBy="pk.article", cascade=CascadeType.ALL)
         private Set<InventaireArticle> inventaireArticle = new HashSet<InventaireArticle>();



         public Set<InventaireArticle> getInventaireArticle() {
            return inventaireArticle;
        }


        public void setInventaireArticle(Set<InventaireArticle> inventaireArticle) {
            this.inventaireArticle = inventaireArticle;
        }


        public String getPosition() {
            return position;
        }


        public void setPosition(String position) {
            this.position = position;
        }


        public int getNbreunite() {
            return nbreunite;
        }


        public void setNbreunite(int nbreunite) {
            this.nbreunite = nbreunite;
        }


        public String getTypecontenant() {
            return typecontenant;
        }


        public void setTypecontenant(String typecontenant) {
            this.typecontenant = typecontenant;
        }


        public String getFournisseur() {
            return fournisseur;
        }


        public void setFournisseur(String fournisseur) {
            this.fournisseur = fournisseur;
        }


        public String getModel() {
            return model;
        }


        public void setModel(String model) {
            this.model = model;
        }


        public String getAdresseIp() {
            return adresseIp;
        }


        public void setAdresseIp(String adresseIp) {
            this.adresseIp = adresseIp;
        }


        public Date getDateSaisie() {
            return dateSaisie;
        }


        public void setDateSaisie(Date dateSaisie) {
            this.dateSaisie = dateSaisie;
        }


        public Date getDateAcquisition() {
            return dateAcquisition;
        }


        public void setDateAcquisition(Date dateAcquisition) {
            this.dateAcquisition = dateAcquisition;
        }


        public float getPrixAchat() {
            return prixAchat;
        }


        public void setPrixAchat(float prixAchat) {
            this.prixAchat = prixAchat;
        }





        public long getId() {
            return id;
        }


        public void setId(long id) {
            this.id = id;
        }


        public String getDesignation() {
            return designation;
        }


        public void setDesignation(String designation) {
            this.designation = designation;
        }


        public String getObservation() {
            return observation;
        }


        public void setObservation(String observation) {
            this.observation = observation;
        }

        public String getDescription() {
            return description;
        }


        public void setDescription(String description) {
            this.description = description;
        }


        public String getNserie() {
            return nserie;
        }


        public void setNserie(String nserie) {
            this.nserie = nserie;
        }


        public String getMarque() {
            return marque;
        }


        public void setMarque(String marque) {
            this.marque = marque;
        }



        public String getIdClient() {
            return idClient;
        }


        public void setIdClient(String idClient) {
            this.idClient = idClient;
        }


        public Date getDateExpiration() {
            return dateExpiration;
        }


        public void setDateExpiration(Date dateExpiration) {
            this.dateExpiration = dateExpiration;
        }


        public String getRfid() {
            return rfid;
        }


        public void setRfid(String rfid) {
            this.rfid = rfid;
        }


        public String getCodeAbarre() {
            return codeAbarre;
        }


        public void setCodeAbarre(String codeAbarre) {
            this.codeAbarre = codeAbarre;
        }




        public float getConsommation() {
            return consommation;
        }


        public void setConsommation(float consommation) {
            this.consommation = consommation;
        }



    }

INVENTAIRE_ARTICLE

@Entity
@Table(name = "INVENTAIRE_ARTICLE")
@AssociationOverrides({
    @AssociationOverride(name = "pk.inventaire",
        joinColumns = @JoinColumn(name = "id_inventaire")),
    @AssociationOverride(name = "pk.article",
        joinColumns = @JoinColumn(name = "id_article")) })
public class InventaireArticle implements Serializable{

  /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private InventaireArticleId pk=new InventaireArticleId();

//  private long id_inventaire;
//  private long id_article;

    @Column(name = "dateSaisie")
    private Date dateSaisie;


    @Column(name = "nouveauContenant")
    private String nouveauContenant;


    @Column(name = "nouvelAsset")
    private String nouvelAsset;


    @Column(name = "assetsAssets")
    private String assetsAssets;

    @Column(name = "assetsNonAsset")
    private String assetsNonAsset;

    @Column(name = "assetsNonTrouves")
    private String assetsNonTrouves;






    public Date getDateSaisie() {
        return dateSaisie;
    }

    public void setDateSaisie(Date dateSaisie) {
        this.dateSaisie = dateSaisie;
    }

    public String getNouveauContenant() {
        return nouveauContenant;
    }

    public void setNouveauContenant(String nouveauContenant) {
        this.nouveauContenant = nouveauContenant;
    }

    public String getNouvelAsset() {
        return nouvelAsset;
    }

    public void setNouvelAsset(String nouvelAsset) {
        this.nouvelAsset = nouvelAsset;
    }

    public String getAssetsAssets() {
        return assetsAssets;
    }

    public void setAssetsAssets(String assetsAssets) {
        this.assetsAssets = assetsAssets;
    }

    public String getAssetsNonAsset() {
        return assetsNonAsset;
    }

    public void setAssetsNonAsset(String assetsNonAsset) {
        this.assetsNonAsset = assetsNonAsset;
    }

    public String getAssetsNonTrouves() {
        return assetsNonTrouves;
    }

    public void setAssetsNonTrouves(String assetsNonTrouves) {
        this.assetsNonTrouves = assetsNonTrouves;
    }

    public InventaireArticleId getPk() {
        return pk;
    }

    public void setPk(InventaireArticleId pk) {
        this.pk = pk;
    }


    @Transient
    public Article getArticle() {
        return getPk().getArticle();
    }

    public void setArticle(Article article) {
        getPk().setArticle(article);
    }

    @Transient
    public Inventaire getInventaire() {
        return getPk().getInventaire();
    }
    public void setInventaire(Inventaire inventaire) {
        getPk().setInventaire(inventaire);
    } 


    @Override
    public int hashCode() {


        return (getPk()!=null?getPk().hashCode():0);
    }
//
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;


        InventaireArticle other = (InventaireArticle) obj;
       if (getPk()!=null ? !getPk().equals(other.getPk()): other.getPk() !=null) return false;
      // if (article!=null ? !article.equals(other.article): other.article !=null) return false;
        return true;
    }



}

My script of table : INVENTAIRE_ARTICLE

CREATE TABLE [dbo].[INVENTAIRE_ARTICLE](
    [article] [numeric](19, 0) NOT NULL,
    [inventaire] [numeric](19, 0) NOT NULL,
    [assetsAssets] [varchar](255) NULL,
    [assetsNonAsset] [varchar](255) NULL,
    [assetsNonTrouves] [varchar](255) NULL,
    [dateSaisie] [datetime2](7) NULL,
    [nouveauContenant] [varchar](255) NULL,
    [nouvelAsset] [varchar](255) NULL,
PRIMARY KEY CLUSTERED 
(
    [article] ASC,
    [inventaire] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

When i want to create an instance of inventaire i have this exception :

com.microsoft.sqlserver.jdbc.SQLServerException: Une erreur de d걡ssement arithm굩que s'est produite lors de la conversion de varbinary en type de donn꦳ numeric.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer.nextRow(SQLServerResultSet.java:4853)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.fetchBufferNext(SQLServerResultSet.java:1781)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(SQLServerResultSet.java:1034)
    at org.jboss.resource.adapter.jdbc.WrappedResultSet.next(WrappedResultSet.java:1196)
    at org.hibernate.persister.entity.AbstractEntityPersister.getDatabaseSnapshot(AbstractEntityPersister.java:1051)
    at org.hibernate.engine.StatefulPersistenceContext.getDatabaseSnapshot(StatefulPersistenceContext.java:269)
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:212)
    at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:535)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:103)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526)
    at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:319)
    at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:265)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:242)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
    at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)
    at com.kts.dao.InventaireDAO.create(InventaireDAO.java:32)
    at com.kts.dao.InventaireDAO$$FastClassByCGLIB$$7c8691b0.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618)
    at com.kts.dao.InventaireDAO$$EnhancerByCGLIB$$2461102e.create(<generated>)
    at com.kts.services.impl.InventaireService.createInventaire(InventaireService.java:121)
    at com.kts.services.impl.InventaireService$$FastClassByCGLIB$$b529d9b1.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at com.kts.services.impl.InventaireService$$EnhancerByCGLIB$$c8955339.createInventaire(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:166)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:82)
    at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:55)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:68)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:98)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104)
    at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:452)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:196)
    at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:220)
    at org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:153)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at org.apache.cxf.transport.servlet.AbstractCXFServlet.service(AbstractCXFServlet.java:211)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:662)

why i have type varbinary? i specified to my colum type of numeric(19,0) in INVENTAIRE_ARTICLE,

Aucun commentaire:

Enregistrer un commentaire