2010-11-21 18 views
0

Ich habe die folgende einfache Einheit:JPA Entity mit nicht @Column Anmerkung

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

    } 

und das ist Smooks die Config Ich verwende:

<?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> 

Wenn ich versuche, und an das Unternehmen speichern, ich erhalte die folgende Fehlermeldung:

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

Sie aus dem Getter für detectedDate sehen, dass, wenn die detectedDate ist eine leere Zeichenfolge (die Wenn dieses Attribut in der Quell-XML für die Smooks-Umwandlung fehlt, sollte der Getter null zurückgeben.

Debuggen dieser Teil des Codes gibt es tatsächlich Null zurück.

Es ist fast wie der Getter wird nicht verwendet, um den Wert für detectedDate zu erhalten. Wenn es wäre, wäre es entweder null oder zumindest eine einzelne Raumzeichenfolge.

Antwort

0

Als Antwort auf meine eigene Frage kommt das Problem von der Tatsache, dass Sie nur die Elementdefinitionen oder die Methoden kommentieren können, aber nicht beide. Beachten Sie, dass ich die @Id-Elementvariable & mit den anderen Anmerkungen zu den Methoden versehen hat.

Verschieben Sie die @ Id-Annotation in das Getter für dieses Feld, um das Problem zu lösen.