使用Hibernate注释映射表的一列

使用Hibernate注释映射表的一列,hibernate,join,Hibernate,Join,我在一个私人网络上工作,所以很难复制和粘贴我的代码。我已经找到了一大堆接近我需要的答案,但没有一个能解决问题。我将尝试做一个快速的代码示例,希望能够很好地解释我的问题 @Table(name="DRIVER") class Driver { long id; //ID - primary key of Driver String driverIdentStr; // DRIVER_IDENT_STR - like driver's license # }//end class

我在一个私人网络上工作,所以很难复制和粘贴我的代码。我已经找到了一大堆接近我需要的答案,但没有一个能解决问题。我将尝试做一个快速的代码示例,希望能够很好地解释我的问题

@Table(name="DRIVER")
class Driver {
    long id; //ID - primary key of Driver
    String driverIdentStr;  // DRIVER_IDENT_STR - like driver's license #
}//end class Driver

@Table(name="GROUP_PARTICIPANT")
class GroupParticipant {
    long id; //ID - primary key of GroupParticipant
    long driverId; //DRIVER_ID - id of the Driver participanting and maps to Driver.id

    //I just want this one value from Driver and not the whole Driver...
    //I've tried:
    //@Formula("(select driverIdentStr from Driver where Driver.id = DRIVER_ID)")
    //also tried:
    //@Column(table="DRIVER", name="driverIdentStr")
    String driverIdentStr;  
}//end class GroupParticipant
@Formula失败,找不到表或视图,但我确实定义了一个驱动程序类映射到驱动程序表。当我将@Formula中的查询语言更改为SQL而不是HQL时,Hibernate抱怨GROUPPARTICIPANT0.DriverItemStr是无效的标识符-认为它试图从GroupParticipant检索DriverItemStr,而不是从Driver获取值

我认为,@列失败了,因为我不确定如何从GroupParticipant中的driverId映射到驱动程序

总之,我不知道如何从Driver.id上加入GroupParticipant.driverId并获取Driver.driverIdentStr中提取GroupParticipant.driverIdentStr

任何帮助都将不胜感激。

@Formula注释被解释为一个SQL片段,因此,假设基于映射的标准命名,以下内容应该可以工作:

@Formula("SELECT driverIdentStr FROM DRIVER WHERE id = driverId")
澄清:

DriverItemStr是实体驱动程序中映射到该属性的列名。 id是实体驱动程序中的主键列名。 driverId是GroupParticipant中的列名。 在数据库区分大小写的情况下,我使用了显式表名驱动程序。 这就是成功的原因

@公式从驱动程序d中选择d.DRIVER_IDENT_STR,其中d.ID=驱动程序ID

我在下面找到了答案: 在更复杂的示例标题下

以下是我从阅读和示例中学到的

公式注释中只有SQL,根本没有HQL 在找到上面的示例之前,我使用了d。在公式查询和休眠的WHERE而不是SELECT部分。在这一点上,我认为Hibernate忽略了我的公式注释并试图从主表中获取值,但它并没有忽略我的公式,我的公式本质上是告诉它从主表中获取值,因为d。我不习惯告诉你其他的事情。 谢谢