2010-11-21 67 views
0

我有以下简单的实体:JPA实体不使用@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; 
} 

    } 

,这是Smooks的我使用的配置:

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

当我尝试并保存实体,我收到以下错误:

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

您可以从detectedDate的getter中看到,如果detectedDate是空字符串(它是这是如果该属性从Smooks转换的源XML中丢失),那么getter应该返回null。

调试这部分代码确实返回null。

这几乎就像getter没有被用来获取detectedDate的值。如果它是空的,或者至少是一个空格字符串。

回答

0

在回答我自己的问题时,问题来自于您只能注释成员定义或方法的事实,但不能同时注释这两个方面。注意我注释了@Id成员变量&,将其他注释放在方法上。

将@Id注释移动到该字段的getter以解决问题。