2010-11-21 41 views
0

je l'entité simple:JPA Entité de ne pas utiliser l'annotation @Column

package net.plus.msodb.model; 

    import java.io.Serializable; 

    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.Id; 
    import javax.persistence.Table; 

    @Entity 
    @Table(schema="msodb", name="mso") 
    public class Mso implements Serializable { 
@Id 
private Integer incidentReference; 

private String detectedDate; 
private String detectedTime; 
private String startDate; 
private String startTime; 
private String anticipatedClearDate; 
private String anticipatedClearTime; 
private String actualClearDate; 
private String actualClearTime; 
private String headline; 
private String progress; 
private String details; 
private String servicesType; 
private String servicesCount; 

public Mso() { 
} 

@Column(name="detectedDate") 
public String getDetectedDate() { 
    if(detectedDate == "") { 
    return null; 
    } 

    return detectedDate + " " + detectedTime; 
} 

     /* 
     * Getters & Setters removed to save space 
     */ 

@Column(name="detectedDate") 
public void setDetectedDate(String detectedDate) { 
    this.detectedDate = detectedDate; 
} 

public void setStartDate(String startDate) { 
    this.startDate = startDate; 
} 

public void setAnticipatedClearDate(String anticipatedClearDate) { 
    this.anticipatedClearDate = anticipatedClearDate; 
} 

public void setActualClearDate(String actualClearDate) { 
    this.actualClearDate = actualClearDate; 
} 

    } 

et c'est Smooks la config j'utilise:

<?xml version="1.0" encoding="UTF-8"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd"> 
    <params> 
    <param name="stream.filter.type">SAX</param> 
    <param name="inputType">input.xml</param> 
    <param name="input.xml" type="input.type.actived">Workspace://MSODBActions/src/test/resources/msos.xml</param> 
    </params> 
    <jb:bean beanId="Mso" class="net.plus.msodb.model.Mso" createOnElement="/msos/mso"> 
    <jb:value data="/msos/mso/@actualClearDate" property="actualClearDate"/> 
    <jb:value data="/msos/mso/@actualClearTime" property="actualClearTime"/> 
    <jb:value data="/msos/mso/@anticipatedClearDate" property="anticipatedClearDate"/> 
    <jb:value data="/msos/mso/@anticipatedClearTime" property="anticipatedClearTime"/> 
    <jb:value data="/msos/mso/@details" property="details"/> 
    <jb:value data="/msos/mso/@detectedDate" property="detectedDate"/> 
    <jb:value data="/msos/mso/@detectedTime" property="detectedTime"/> 
    <jb:value data="/msos/mso/@headline" property="headline"/> 
    <jb:value data="/msos/mso/@incidentReference" decoder="Integer" property="incidentReference"/> 
    <jb:value data="/msos/mso/@progress" property="progress"/> 
    <jb:value data="/msos/mso/@servicesCount" property="servicesCount"/> 
    <jb:value data="/msos/mso/@servicesType" property="servicesType"/> 
    <jb:value data="/msos/mso/@startDate" property="startDate"/> 
    <jb:value data="/msos/mso/@startTime" property="startTime"/> 
    </jb:bean> 
</smooks-resource-list> 

Lorsque je tente de sauver l'entité, Je reçois l'erreur suivante:

Data truncation: Incorrect datetime value: '' for column 'detectedDate' at row 1 

Vous pouvez voir le getter pour detectedDate que si le detectedDate est une chaîne vide (qui c'est si cet attribut est absent du XML source pour la transformation de Smooks) alors le getter devrait retourner null.

Débogage de cette partie du code, il retourne en effet null.

Il est presque comme si le getter n'était pas utilisé pour obtenir la valeur de detectedDate. Si c'était le cas, il serait soit nul, soit au moins une chaîne d'espace unique.

Répondre

0

En réponse à ma propre question, le problème vient du fait que vous ne pouvez annoter que les définitions de membres ou les méthodes, mais pas les deux. Notez que j'avais annoté la variable membre @Id & mettre les autres annotations sur les méthodes.

Déplacez l'annotation @Id vers le getter pour ce champ afin de résoudre le problème.