2016-07-20 7 views
0

私はHibernate 4.3、Java 8、およびMicrosoft SQL 2014(MSSQL)で作業しています。Hibernate S1093または07009無効なパラメータインデックス

私はHibernateでエンティティのマージ()をしようとしています。

public void actualizar(FactorUnidadMedida obj){ 
    EntityManagerFactory entityManagerFactory = HibernateUtil.getEntityManagerFactory(); 
    EntityManager em = entityManagerFactory.createEntityManager(); 
    em.getTransaction().begin(); 
    em.merge(obj); 
    em.getTransaction().commit(); 
} 

Hibernateは(コミットやろう)私は次のエラーを取得する:

無効なパラメータインデックス8.

は、私は、Hibernate(4.3、5.0)のdiferentsバージョンを試してみましたが、JDBCのドライバ( sqljdbc4.jar、jTDS.jar)。

これはログです:

2016-07-20 15:09:35 Hibernate: update FactorUnidadMedida set estado=?, factor=?, fecha=?, usuario=? where idEmpresa=? and codUnidadDestino=? and codUnidadOrigen=?

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [1] as [VARCHAR] - [AC]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [2] as [NUMERIC] - [0.01]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [3] as [TIMESTAMP] - [Wed Jul 20 15:09:25 COT 2016]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [4] as [VARCHAR] - [ADMIN]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [5] as [INTEGER] - [1]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [6] as [VARCHAR] - [MTR]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [7] as [INTEGER] - [1]

2016-07-20 15:09:35 TRACE BasicBinder:65 - binding parameter [8] as [VARCHAR] - [CMS]

2016-07-20 15:09:35 INFO AbstractBatchImpl:193 - HHH000010: On release of batch it still contained JDBC statements

2016-07-20 15:09:35 WARN SqlExceptionHelper:127 - SQL Error: 0, SQLState: 07009

2016-07-20 15:09:35 ERROR SqlExceptionHelper:129 - Invalid parameter index 8.

Aditional情報:

エンティティは、2つの複合-Foreingキーを持っています。

package co.com.hermesWeb.model; 

import java.io.Serializable; 
import java.math.BigDecimal; 
import java.util.Date; 

import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.Id; 
import javax.persistence.IdClass; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinColumns; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 

@Entity 
@Table(name="FactorUnidadMedida") 
@IdClass(FactorUnidadMedidaPK.class) 
public class FactorUnidadMedida implements Serializable { 
    private static final long serialVersionUID = -4123771692139896513L; 

    @Id 
    private int idEmpresa = 0; 
    @Id 
    @OneToOne(fetch=FetchType.EAGER) 
    @JoinColumns({ 
     @JoinColumn(name="idEmpresa", referencedColumnName="idEmpresa", insertable=false, updatable=false), 
     @JoinColumn(name="codUnidadOrigen", referencedColumnName="codigo", insertable=false, updatable=false) 
    }) 
    private UnidadMedida unidadMedidaOrigen = null; 
    @Id 
    @OneToOne(fetch=FetchType.EAGER) 
    @JoinColumns({ 
     @JoinColumn(name="idEmpresa", referencedColumnName="idEmpresa", insertable=false, updatable=false), 
     @JoinColumn(name="codUnidadDestino", referencedColumnName="codigo", insertable=false, updatable=false) 
    }) 
    private UnidadMedida unidadMedidaDestino = null; 
    private BigDecimal factor = BigDecimal.ZERO; 
    private String estado = ""; 
    private String usuario = ""; 
    private Date fecha = null; 

    public int getIdEmpresa() { 
     return idEmpresa; 
    } 
    public void setIdEmpresa(int idEmpresa) { 
     this.idEmpresa = idEmpresa; 
    } 
    public UnidadMedida getUnidadMedidaOrigen() { 
     return unidadMedidaOrigen; 
    } 
    public void setUnidadMedidaOrigen(UnidadMedida unidadMedidaOrigen) { 
     this.unidadMedidaOrigen = unidadMedidaOrigen; 
    } 
    public UnidadMedida getUnidadMedidaDestino() { 
     return unidadMedidaDestino; 
    } 
    public void setUnidadMedidaDestino(UnidadMedida unidadMedidaDestino) { 
     this.unidadMedidaDestino = unidadMedidaDestino; 
    } 
    public BigDecimal getFactor() { 
     return factor; 
    } 
    public void setFactor(BigDecimal factor) { 
     this.factor = factor; 
    } 
    public String getEstado() { 
     return estado; 
    } 
    public void setEstado(String estado) { 
     this.estado = estado; 
    } 
    public String getUsuario() { 
     return usuario; 
    } 
    public void setUsuario(String usuario) { 
     this.usuario = usuario; 
    } 
    public Date getFecha() { 
     return fecha; 
    } 
    public void setFecha(Date fecha) { 
     this.fecha = fecha; 
    } 

} 

[idEmpresa、codUnidadOrigen]および[idEmpresa、codUnidadDestino]は私のforeingキーであり、インクルードは[idEmpresa]同じフィールドを使用していることに注意してください。 その理由でいくつか問題がありますか?

これは、データベース・テーブル・イメージである:私はモデルを変更しなければならなかったALL https://gist.github.com/ferchoman09/45df8600de44eebc37a693e53a2bd391

答えて

0

= log4j.logger.org.hibernate:これは、との完全なスタックです http://imgur.com/NRI3q3j

。私は別々のフィールドに両方のFroreing Keysを置いた。

package co.com.hermesWeb.model; 

import java.io.Serializable; 
import java.math.BigDecimal; 
import java.util.Date; 

import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.Id; 
import javax.persistence.IdClass; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinColumns; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 

@Entity 
@Table(name="FactorUnidadMedida") 
@IdClass(FactorUnidadMedidaPK.class) 
public class FactorUnidadMedida implements Serializable { 
    private static final long serialVersionUID = -4123771692139896513L; 

    @Id 
    private int idEmpresa = 0; 
    @Id 
    private String codUnidadOrigen = ""; 
    @Id 
    private String codUnidadDestino = ""; 

    @OneToOne(fetch=FetchType.EAGER) 
    @JoinColumns({ 
     @JoinColumn(name="idEmpresa", referencedColumnName="idEmpresa", insertable=false, updatable=false), 
     @JoinColumn(name="codUnidadOrigen", referencedColumnName="codigo", insertable=false, updatable=false) 
    }) 
    private UnidadMedida unidadMedidaOrigen = null; 

    @OneToOne(fetch=FetchType.EAGER) 
    @JoinColumns({ 
     @JoinColumn(name="idEmpresa", referencedColumnName="idEmpresa", insertable=false, updatable=false), 
     @JoinColumn(name="codUnidadDestino", referencedColumnName="codigo", insertable=false, updatable=false) 
    }) 
    private UnidadMedida unidadMedidaDestino = null; 
    private BigDecimal factor = BigDecimal.ZERO; 
    private String estado = ""; 
    private String usuario = ""; 
    private Date fecha = null; 

    public int getIdEmpresa() { 
     return idEmpresa; 
    } 
    public void setIdEmpresa(int idEmpresa) { 
     this.idEmpresa = idEmpresa; 
    } 
    public UnidadMedida getUnidadMedidaOrigen() { 
     return unidadMedidaOrigen; 
    } 
    public UnidadMedida getUnidadMedidaDestino() { 
     return unidadMedidaDestino; 
    } 
    public BigDecimal getFactor() { 
     return factor; 
    } 
    public void setFactor(BigDecimal factor) { 
     this.factor = factor; 
    } 
    public String getEstado() { 
     return estado; 
    } 
    public void setEstado(String estado) { 
     this.estado = estado; 
    } 
    public String getUsuario() { 
     return usuario; 
    } 
    public void setUsuario(String usuario) { 
     this.usuario = usuario; 
    } 
    public Date getFecha() { 
     return fecha; 
    } 
    public void setFecha(Date fecha) { 
     this.fecha = fecha; 
    } 
    public String getCodUnidadOrigen() { 
     return codUnidadOrigen; 
    } 
    public void setCodUnidadOrigen(String codUnidadOrigen) { 
     this.codUnidadOrigen = codUnidadOrigen; 
    } 
    public String getCodUnidadDestino() { 
     return codUnidadDestino; 
    } 
    public void setCodUnidadDestino(String codUnidadDestino) { 
     this.codUnidadDestino = codUnidadDestino; 
    } 

} 
関連する問題