2010-11-21 5 views
0

У меня есть следующий простой объект:JPA Entity не используя @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, что если detectedDate является пустой строкой (которая это если этот атрибут отсутствует в исходном XML для преобразования Smooks), то получатель должен вернуть значение null.

Отладка этой части кода действительно возвращает значение null.

Это почти похоже на то, что геттер не используется для получения значения для detectDate. Если бы это было, это было бы либо нулевым, либо хотя бы одной пробельной строкой.

ответ

0

В ответ на мой собственный вопрос проблема возникает из-за того, что вы можете только аннотировать определения членов или методы, но не оба. Заметьте, что я аннотировал переменную-член @Id &, добавив другие аннотации к методам.

Переместите @Id аннотацию к получателю для этого поля, чтобы решить проблему.

Смежные вопросы