hibernate中实体类构造方法中含有Timestamp 类型变量的"no appropriate constructor.." 错误提示的解决办法

在使用Hibernate查询部分字段时,如果实体类构造方法中有Timestamp类型变量,可能会遇到'no appropriate constructor..'错误。解决方案是将构造方法中的Timestamp改为Object类型,并在内部通过转换函数将传入的字符串转换为Timestamp。这样可以避免查询时的类型匹配问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我项目中使用S2SH架构中遇到一个问题,我只需要查部份字段,于是在dao中使用

String hql = "select new Content(u.category,u.title,u.addtime) from Content u ";

Query query = this.getSession().createQuery(hql);

实体类中的构造方法中时间字段addtime使用的是myeclipse反向自动生成的Timestamp类型,这样的查询时,就报“no appropriate constructor..”错误,

 

测试了大半天,差不多各种可能性都测试了一遍,最终才发现是在实体类的构造函数中使用Timestamp类型出的错,于是才在网上找解决办法,可以是这个问题发现的人不多,找了很多才看到一偏文章介绍,解决办法记在下面,方便以后像我一样遇到这问题的朋友解决问题:

 

1、把实体类构造方法参数中的Timestamp改为Object类型。

2、写一个类型转换函数,在构造方法内部调用这函数赋值。

 

public Content(Category category, String title,Object addtime)

{

       this.addtime= stringToTimestamp(addtime.toString());

}

public static Timestamp stringToTimestamp(String dateStr){
  
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   Calendar cal = Calendar.getInstance();
   try {
    Date date = sdf.parse(dateStr);
    date.getTime();
    cal.setTime(date);
    return new Timestamp(cal.getTimeInMillis());
   } catch (ParseException e) {
    e.printStackTrace();
   
   cal.setTime(new Date());
   return new Timestamp(cal.getTimeInMillis());
}

测试了一下。终于解决问题。

 

也有网友说不需要上面的转换函数,直接调用

 this.addtime Timestamp.valueOf(addtime.toString());

就可以 赋值,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值