2016-07-20 1 views
0

Я работаю с Hibernate 4.3 и Java 8 и Microsoft SQL 2014 (MSSQL).Hibernate S1093 или 07009 Неверный параметр index

Я пытаюсь сделать слияние() объекта с Hibernate.

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

Когда спящий режим пытается сделать совершить() я получаю следующее сообщение об ошибке:

индекса Недопустимого параметра 8.

Я попытался diferents версии Hibernate (4.3, 5.0) и водители 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.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

сущностей имеют два композитных ЗАРУБЕЖНЫЕ ключей.

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] мои ключи ЗАРУБЕЖНЫЕ и используют то же поле [idEmpresa]. Некоторая проблема по этой причине?

Это базовая таблица данных изображения: http://imgur.com/NRI3q3j

Это полный стек с: log4j.logger.org.hibernate = ALL https://gist.github.com/ferchoman09/45df8600de44eebc37a693e53a2bd391

ответ

0

мне пришлось изменить модель. Я помещаю оба Froreing Keys wihout @Id в отдельные поля.

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; 
    } 

} 
Смежные вопросы