是否有一种方法可以将列的一部分映射到变量



我的表中有两个日期列,START_DATEEND_DATE。我正在使用Oracle XE 11g db,并且已经了解到我可以只选择日期的一部分(例如月份)。我希望我的对象有startMonth, endMonth, startHourendHour。我知道如何从数据库中的两列中选择这些东西(正如本文所解释的),但我不知道如何将它们映射到变量。

进一步解释一下,开始和结束时间表示从开始月份到结束月份期间的每日可用性。我正在使用Eclipse Kepler, Spring IDE 3.5和Hibernate 4.3.5,如果它们有任何不同的话。

这个表不会改变一旦它被填充,所以我不会保存任何东西从对象到数据库,只是从它读取。

你只需要一个公式:

有时候,您希望数据库为您做一些计算,而不是在JVM中,您可能还会创建某种虚拟列。您可以使用SQL片段(又名公式)而不是将属性映射到列中。这种属性是只读的(它的值由公式片段计算)。

@Formula("obj_length * obj_height * obj_width")
public long getObjectVolume()

也就是说,要非常小心:给定时区中的给定日期可能与另一个时区中的相同日期不在同一个月。如果你处理多个时区,使用数据库来计算这个策略是行不通的。

另外,请注意,如果您在Java代码中更改了日期的值,然后请求月份的值,那么您将不会获得新日期的月份,而是获得最初加载时的月份值。也许您应该简单地创建一个getter方法,在每次调用它时根据当前日期计算月份。但是,这将不允许您创建基于月份的查询。

手动添加查询字段:

select TO_CHAR(START_DATE,<your pattern for hour>) as START_HOUR,
       TO_CHAR(START_DATE,<your pattern for month>) as START_MONTH,
       ...

,然后很容易地映射它们,就好像你的表有你需要的4个字段。

另一个选择是有一个setter和多个getter,每个部分一个字段你需要:

setStartDate(date) {
    this.startDate=date
}
getStartMonth() {
    return this.startDate.get(Date.MONTH) + 1;
}

最新更新