Foros del Web » Programación para mayores de 30 ;) » Java »

Flush que no permite posteriores búsquedas

Estas en el tema de Flush que no permite posteriores búsquedas en el foro de Java en Foros del Web. Hola! Comento mi caso ya es estoy ya desesperado es poco... =( Tengo una aplicación web que tiene que insertar autores en una base de ...
  #1 (permalink)  
Antiguo 03/09/2011, 08:35
 
Fecha de Ingreso: septiembre-2011
Mensajes: 3
Antigüedad: 12 años, 6 meses
Puntos: 0
Flush que no permite posteriores búsquedas

Hola!

Comento mi caso ya es estoy ya desesperado es poco... =(
Tengo una aplicación web que tiene que insertar autores en una base de datos apartir de un fichero .xlsx excel. El caso es que he de comprobar antes si el autor ya está en la base de datos mirando el DNI... El problema es que si dentro del fichero está dos veces el autor... coge el sistema y hace correctamente el persist y supuestamente el flush para el primer autor.. pero para el segudno autor hago una busqueda y no lo encuentra y cuando hace el flush el sistema encuentra la clave unique duplicada...
Hay alguna forma de que cuando haga el flush lo inserte "físicamente en la base de datos" o tengo que poner alguan configuración especial para que sea capaz de encontrarlo la consulta?

insercion importar.java
if ((autorComplementosPersistente = acusb.getByNif(autorComplementos.getNif())) == null) {
autorComplementosPersistente = autorComplementos.clone();
em.persist(autorComplementosPersistente);
em.flush();
}

consulta AutorComplementosSteatelessBean.java
@Override
public AutorComplementos getByNif(String nif){
Query q = em.createNamedQuery("AutorComplementos.findByNif") ;
q.setParameter("nif",nif);
if(!q.getResultList().isEmpty())
return (AutorComplementos) q.getResultList().get(0);
return null;
}

Cita:
lemi.entity.complementos;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
*
* @author Alvaro
*/
@Entity
@Table(name = "institucion")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "InstitucionComplementos.findAll", query = "SELECT i FROM InstitucionComplementos i"),
@NamedQuery(name = "InstitucionComplementos.findByIdInstitucion", query = "SELECT i FROM InstitucionComplementos i WHERE i.idInstitucion = :idInstitucion"),
@NamedQuery(name = "InstitucionComplementos.findByNombre", query = "SELECT i FROM InstitucionComplementos i WHERE i.nombre = :nombre"),
@NamedQuery(name = "InstitucionComplementos.findBySiglas", query = "SELECT i FROM InstitucionComplementos i WHERE i.siglas = :siglas"),
@NamedQuery(name = "InstitucionComplementos.findByDireccion", query = "SELECT i FROM InstitucionComplementos i WHERE i.direccion = :direccion"),
@NamedQuery(name = "InstitucionComplementos.findByPais", query = "SELECT i FROM InstitucionComplementos i WHERE i.pais = :pais"),
@NamedQuery(name = "InstitucionComplementos.findByTipo", query = "SELECT i FROM InstitucionComplementos i WHERE i.tipo = :tipo")})
public class InstitucionComplementos implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id_institucion")
private Integer idInstitucion;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "nombre")
private String nombre;
@Size(max = 8)
@Column(name = "siglas")
private String siglas;
@Size(max = 180)
@Column(name = "direccion")
private String direccion;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "pais")
private String pais;
@Size(max = 20)
@Column(name = "tipo")
private String tipo;
@ManyToMany(mappedBy = "institucionComplementosCollection")
private Collection<AutorComplementos> autorComplementosCollection;

public InstitucionComplementos() {
idInstitucion=0;
}

public InstitucionComplementos(Integer idInstitucion) {
this.idInstitucion = idInstitucion;
}

public InstitucionComplementos(Integer idInstitucion, String nombre, String pais) {
this.idInstitucion = idInstitucion;
this.nombre = nombre;
this.pais = pais;
}

public Integer getIdInstitucion() {
return idInstitucion;
}

public void setIdInstitucion(Integer idInstitucion) {
this.idInstitucion = idInstitucion;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getSiglas() {
return siglas;
}

public void setSiglas(String siglas) {
this.siglas = siglas;
}

public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public String getPais() {
return pais;
}

public void setPais(String pais) {
this.pais = pais;
}

public String getTipo() {
return tipo;
}

public void setTipo(String tipo) {
this.tipo = tipo;
}

@XmlTransient
public Collection<AutorComplementos> getAutorComplementosCollection() {
return autorComplementosCollection;
}

public void setAutorComplementosCollection(Collection<AutorCom plementos> autorComplementosCollection) {
this.autorComplementosCollection = autorComplementosCollection;
}

@Override
public int hashCode() {
int hash = 0;
hash += (idInstitucion != null ? idInstitucion.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof InstitucionComplementos)) {
return false;
}
InstitucionComplementos other = (InstitucionComplementos) object;
if ((this.idInstitucion == null && other.idInstitucion != null) || (this.idInstitucion != null && !this.idInstitucion.equals(other.idInstitucion))) {
return false;
}
return true;
}

Última edición por ysinotelodigo; 03/09/2011 a las 09:00
  #2 (permalink)  
Antiguo 03/09/2011, 11:01
 
Fecha de Ingreso: septiembre-2011
Mensajes: 3
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Flush que no permite posteriores búsquedas

Hola!

Que ya por fin he solucionado el problema.
El caso es que la base de datos en MySQL tenía el motor INNODB y lo he cambiaod por el MyISAM y ya va genial!!!

CREATE TABLE `autor` (
`id_autor` int(11) NOT NULL AUTO_INCREMENT,
......
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Si algun administrado ve esto que cambie el titulo y ponga solve en el thread!

Etiquetas: flush, permite
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:34.