spring-data jpa 查询部分属性

一 准备

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对象

三 尝试

可以使用List<Object[]> 接收。但是不是很方便

 //用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的。

经过一番尝试由于IndexObject对象我不想改变,只能先差Topic对象再循环赋值了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值