2017-06-12 4 views
0

Je lance une instruction sql essayant d'obtenir un objet avec un champ Date et génère une erreur. Je peux enregistrer sans aucun problème dans ma base de données, mais je ne peux pas récupérer les données et créer des objets.Erreur: L'objet de la classe String, issu du mappage, n'a pas pu être converti en [classe java.sql.Timestamp]

Erreur:

Exception [TOPLINK-3002] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.ConversionException 
Exception Description: The object [https://stackoverflow.com/questions/43551744/php-function-error-object-of-class-pdostatement09/06/17 15:05:08,022000000], of class [class java.lang.String], from mapping [oracle.toplink.essentials.mappings.DirectToFieldMapping[fecha_cambio-->SGSI_DOCUMENTOS.FECHA_CAMBIO]] with descriptor [RelationalDescriptor(com.dominion.procop.sgsi.entidades.DocumentoOnline --> [DatabaseTable(SGSI_DOCUMENTOS)])], could not be converted to [class java.sql.Timestamp]. 
    at oracle.toplink.essentials.exceptions.ConversionException.incorrectTimestampFormat(ConversionException.java:99) 

requête qui jette erreur:

@NamedQuery(name="ProyContDocumentos.getDocumentosPorPC", query="SELECT p.documento FROM ProyContDocumentos p " + 
     "WHERE p.idProyecto = :idProyecto AND p.idControl = :idControl ORDER BY p.idDocumento ASC"), 

DocumentoOnline:

@Entity 
@Table(name = "SGSI_DOCUMENTOS") 
@NamedQueries({ 
    @NamedQuery(name="DocumentoOnline.getAll", query="SELECT d FROM DocumentoOnline d ORDER BY d.id ASC") 
}) 

public class DocumentoOnline extends EntidadBase { 

    private static final long serialVersionUID = 6891627122405312774L; 

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

    @Column(name = "titulo", nullable = false, length = 3000) 
    private String     titulo; 

    @Column(name = "descripcion", nullable = false, length = 3000) 
    private String     descripcion; 

    @Column(nullable = false) 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date    fecha_cambio; 

    @Column(name = "contenido", nullable = false, length = 4000) 
    private String     contenido; 

    /* 
    * GETTERS Y SETTERS 
    */ 

    public int getId() { 
     return id; 
    } 

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

    public String getTitulo() { 
     return titulo; 
    } 

    public void setTitulo(String titulo) { 
     this.titulo = titulo; 
    } 

    public String getDescripcion() { 
     return descripcion; 
    } 

    public void setDescripcion(String descripcion) { 
     this.descripcion = descripcion; 
    } 

    public Date getFecha_cambio() { 
     return fecha_cambio; 
    } 

    public void setFecha_cambio(Date fecha_cambio) { 
     this.fecha_cambio = fecha_cambio; 
    } 

    public String getContenido() { 
     return contenido; 
    } 

    public void setContenido(String contenido) { 
     this.contenido = contenido; 
    } 

    @Override 
    public String toString() { 
     return "DocumentoOnline [id=" + id + ", titulo=" + titulo + ", descripcion=" + descripcion + ", fecha_cambio=" 
       + fecha_cambio + ", contenido=" + contenido + "]"; 
    } 
} 

Le da tabase:

Column Name.........Data type...length..Allow Nulls 
ID_DOCUMENTO........NUMBER..............false 
TITULO..............VARCHAR2....4000....false 
DESCRIPCION.........VARCHAR2....4000....false 
FECHA_CAMBIO........VARCHAR2....1000....false 
CONTENIDO...........VARCHAR2....4000....true 

Que puis-je faire pour analyser cette chaîne à ce jour() et créer mon DocumentoOnline objet? Cordialement.

+0

Le message d'erreur semble tout à fait clair pour moi, votre chaîne a un peu plus de juste l'horodatage dedans: 'https://stackoverflow.com/questions/43551744/php-function-error-object-of-class-pdostatement09/06/17 15: 05: 08,022000000'. Je ne sais pas pourquoi il inclut l'URL de [cette question: Erreur de fonction Php (Objet de la classe PDOStatement)] (https://stackoverflow.com/questions/43551744/php-function-error-object-of-class- pdostatement), je suppose que ça vient de votre base de données? –

+0

Peut-être devriez-vous nous faire savoir à quoi ressemble votre table de base de données (SGSI_DOCUMENTOS)? Types de données de colonne et à quoi ressemble la ligne lorsque vous interrogez votre base de données Oracle directement. –

+0

@ OleV.V., Mis à jour avec les lignes de SGSI_DOCUMENTOS. Maintenant, je vois le type de fecha_cambio est varchar2 et non timestamp ... –

Répondre

1

Le tableau SGSI_DOCUMENTOS était:

Column Name.........Data type...length..Allow Nulls 
ID_DOCUMENTO........NUMBER..............false 
TITULO..............VARCHAR2....4000....false 
DESCRIPCION.........VARCHAR2....4000....false 
FECHA_CAMBIO........VARCHAR2....1000....false 
CONTENIDO...........VARCHAR2....4000....true 

I modifié le type de données à la ligne FECHA_CAMBIO avec l'énoncé:

alter table SGSI_DOCUMENTOS 
modify 
( 
    fecha_cambio timestamp(6) 
);