2016-05-05 5 views
-2

私のデータベースにはack_date_timeが格納されている(ただし文字列で)列はありますが、このモデルを起動してgmtの文字列に日付を保存していません。例:Tue Aug 04 16:58:27 GMT+08:00 2015、できるだけ日付フィールドとして変更したい。ネイティブクエリを使用せずにこのクエリ文をjpaでどのように変更できますか?私はmysql上でそれを注文することができますが、jpaではできません。私はちょっと新しいです。前もって感謝します。nativeQueryを使用せずにJPAでこれをどのように変換できますか?

select *, STR_TO_DATE(CONCAT(SUBSTR(ack_date_time,1,20),SUBSTR(ack_date_time,31,34)),'%W %M %D %H:%i:%s %Y') as acktime from DEMI order by acktime desc; 

答えて

0

私が正しく理解している場合、ack_date_time列のDBレベルのデータ型はVARCHARあり、それはないですか?

@Converter 
public class DemiDateConverter implements AttributeConverter<Timestamp, String> { 

/** 
    * Convert Timestamp object to a String. 
    */ 
@Override 
public String convertToDatabaseColumn(Timestamp ts) { 
    // here you should implement the logic which converts the Timestamp to DB compatible format 
} 

/** 
    * Convert a String to a Timestamp object. 
    */ 
@Override 
public Timestamp convertToEntityAttribute(String str) { 
    // here you should implement the logic that parses string from DB and transforms it to regular timestamp. 
} 
} 

は、その後、あなたのエンティティクラスにコンバータを使用する必要があります。次のようにあなたがあなた自身の属性コンバータを定義することができhttp://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/

:それがある場合

、あなたはここで例を参照してください、AttributeConverterを試すことができます:

@Entity 
public class DemiEntity { 

    // id and other fields 

    @Column(name = "ack_date_time") 
    @Convert(converter = DemiDateConverter.class) 
    private Timestamp acktime; 

    // getters and setters 
    ... 
} 

はところで、あなたはすでにDEMIテーブル用のJPAエンティティを使用しようとしたがありますか?

+0

どうすれば使用できますか?私は少しそれを混乱させて申し訳ありません。 –

+0

'DEMI'テーブルのJPAエンティティクラスは既に持っていますか?もしあなたが持っていれば、それを投稿できますか? –

関連する問題