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