1.有表結構如何
CREATE TABLE `bbs_topic` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT '0', `module_id` int(11) NOT NULL, `post_count` int(11) NOT NULL DEFAULT '1', `reply_count` int(11) NOT NULL DEFAULT '0', `pv` int(11) NOT NULL DEFAULT '0', `content` varchar(150) NOT NULL, `emotion` tinyint(2) DEFAULT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `is_nice` bit(1) NOT NULL DEFAULT b'0', `is_up` bit(1) NOT NULL DEFAULT b'0', PRIMARY KEY (`id`), KEY `moduleID_T` (`module_id`), KEY `userID_T` (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8;
2.生成相應的entity對象爲BbsTopic
@Entity @Table(name = "bbs_topic") public class BbsTopic{ (省略....) }
如今有一查詢對象函數
public class IndexObject{ private String topicId; private String content; }
原先我是先查詢出全部的topic對象,而後再循環賦值。因而我就想能不能在jpa中直接生成IndexObject對象post
可使用List<Object[]> 接收。可是不是很方便code
//用objet[] 能夠接受返回對象 @Query(value = "SELECT id as topicId,content FROM bbs_topic WHERE create_time BETWEEN ?1 AND ?2",nativeQuery = true) @Deprecated List<Object[]> getBbsTopicListByDate(Date fileupdateDate, Date topiclastupdate);
以後我採用new相應對象對象
/*返回對象屬性如何取別名? 不用as,可是數據類型要對*/ @Query(value = "SELECT new com.wayne.common.lucene.entity.IndexObject(p.id topicId,p.content) FROM BbsTopic p WHERE create_time BETWEEN ?1 AND ?2") List<IndexObject> getBbsTopicListByDate2(Date fileupdateDate, Date topiclastupdate);
可是報錯了,最後找緣由是new 須要對象中有相應的構造函數,而且數據類型要要能對應。因此若是對象和數據層中的數據類型不一樣的話,是沒法new的。get
通過一番嘗試因爲IndexObject對象我不想改變,只能先差Topic對象再循環賦值了。it