QueryResponse からタイムスタンプ データを読み取ることができません (結果を POJO にキャストしたい)。SolrDocumentList を使用している場合、エラーはありません。
デシベル-データ-config.xml:
<entity name="discussion" dataSource="mssqlDatasource" pk="id"
transformer="TemplateTransformer, DateFormatTransformer"
query="SELECT d.id, d.title, d.created,
u.first_name, u.last_name,
db.type AS boardType, db.country
FROM discussion d
INNER JOIN wtb_user u ON d.author = u.id
INNER JOIN discussion_category dc ON d.category = dc.id
INNER JOIN discussion_board db ON dc.board = db.id">
<!--<field column="created" dateTimeFormat='yyyyMMdd HH:mm:ss z' />-->
<!--<field column="created" dateTimeFormat='yyyyMMdd' />-->
<field column="first_name" name="firstName" />
<field column="last_name" name="lastName" />
<field column="tableType" template="DISCUSSION" />
<entity name="discussion_post" dataSource="mssqlDatasource"
transformer="ClobTransformer"
query="SELECT dp.message
FROM discussion_post dp
WHERE dp.discussion = '${discussion.id}'">
<field column="message" name="discussionPostMessage" clob="true" />
</entity>
</entity>
schema.xml:
<field name="created" type="date" indexed="false" stored="true"/>
フィールド「作成済み」はデータベースのタイムスタンプであり、インデックスデータを挿入した後の結果は次のようになります(ブラウザ管理コンソールで呼び出されます):
<result name="response" numFound="246" start="0">
<doc>
<str name="boardType">1</str>
<date name="created">2012-10-05T07:29:23.387Z</date>
<arr name="discussionPostMessage">
<str>message test</str>
<str>second</str>
<str>third</str>
</arr>
<str name="firstName">Ashley</str>
<str name="id">10</str>
<str name="lastName">Morgan</str>
<str name="tableType">DISCUSSION</str>
<str name="title">headline test</str>
</doc>
...
今、「すべての結果」を照会しようとしました
public void search(String searchString) {
SolrQuery query = new SolrQuery();
QueryResponse rsp;
try {
query = new SolrQuery();
query.setQuery(DEFAULT_QUERY);
query.setRows(246);
rsp = getServer().query(query);
SolrDocumentList solrDocumentList = rsp.getResults(); // IllegalArgumentException
List<SearchRequestResponseObject> beans = rsp.getBeans(SearchRequestResponseObject.class); //works
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SearchRequestResponseObject.class:
public class SearchRequestResponseObject {
@Field
private String id;
@Field
private String title;
@Field
@Temporal(TemporalType.TIMESTAMP)
//@DateTimeFormat(style = "yyyyMMdd HH:mm:ss z")
//@DateTimeFormat(style = "yyyyMMdd")
private Timestamp created;
...
}
例外:
Caused by: java.lang.IllegalArgumentException: Can not set java.sql.Timestamp field com.solr.SearchRequestResponseObject.created to java.util.Date
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
at java.lang.reflect.Field.set(Field.java:657)
at org.apache.solr.client.solrj.beans.DocumentObjectBinder$DocField.set(DocumentObjectBinder.java:374)
... 45 more
詳細メッセージ:
Exception while setting value : Fri Oct 05 09:29:23 CEST 2012 on private java.sql.Timestamp com.solr.SearchRequestResponseObject.created
私は何が間違っていますか?日付を「作成」する必要があるのはなぜですか?