Java 有没有一种方法可以将列的一部分映射到变量?

Java 有没有一种方法可以将列的一部分映射到变量?,java,oracle,hibernate,Java,Oracle,Hibernate,我的表中有两个日期列,START\u date和END\u date。我使用的是OracleXE11GDB,我知道我只能选择日期的一部分(比如月份)。我希望我的对象具有startMonth、endMonth、startHour和endHour。我知道如何从数据库()中的两列中选择这些内容,但我不知道如何将它们映射到变量 进一步解释一下,开始和结束时间表示从开始月份到结束月份期间的每日可用性。我使用的是EclipseKepler、SpringIDE3.5和Hibernate4.3.5,如果这些有什

我的表中有两个日期列,
START\u date
END\u date
。我使用的是OracleXE11GDB,我知道我只能选择日期的一部分(比如月份)。我希望我的对象具有
startMonth
endMonth
startHour
endHour
。我知道如何从数据库()中的两列中选择这些内容,但我不知道如何将它们映射到变量

进一步解释一下,开始和结束时间表示从开始月份到结束月份期间的每日可用性。我使用的是EclipseKepler、SpringIDE3.5和Hibernate4.3.5,如果这些有什么不同的话


此表填充后不会更改,因此我不会将对象中的任何内容保存到数据库中,只需从中读取即可。

手动执行此操作,您只需在查询中添加字段即可:

select TO_CHAR(START_DATE,<your pattern for hour>) as START_HOUR,
       TO_CHAR(START_DATE,<your pattern for month>) as START_MONTH,
       ...
你只需要一个:

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

也就是说,要非常小心:给定时区中的给定日期可能与另一时区中的相同日期不在同一个月内。如果您处理多个时区,那么使用数据库来确定这一点是不可行的


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

我不确定我是否理解您的意思。我没有使用查询来映射任何其他内容,因为我使用的是Hibernate。其他所有内容都直接映射到一列。好的,然后选中@JBNizet-answer,这是相同的,但使用Hibernate功能。我想如果你使用JPA和实体管理器,它会更合适。谢谢你给我指明了正确的方向!看起来,您可以将Select语句和常规公式/计算放在公式中。
setStartDate(date) {
    this.startDate=date
}
getStartMonth() {
    return this.startDate.get(Date.MONTH) + 1;
}
@Formula("obj_length * obj_height * obj_width")
public long getObjectVolume()