使用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。我不习惯告诉你其他的事情。
谢谢