我在私人网络上工作,因此很难复制和粘贴我的代码。我找到了一堆接近我需要的答案,但没有找到答案。我会尝试快速举例说明我的代码,希望能够解释我的问题。
@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失败了“找不到表或视图”,但我肯定有一个Driver类定义映射到DRIVER表。当我将@Formula中的查询语言更改为SQL而不是HQL时,Hibernate抱怨GROUPPARTICIPANT0.driverIdentStr是一个无效的标识符 - 认为它试图从GroupParticipant中检索driverIdentStr而不是从Driver(??)获取值。
@Column失败了,我想,因为我不知道如何从GroupIarticipant中的driverId映射到DRIVER。
总而言之,我无法弄清楚如何让GroupParticipant.driverIdentStr从Driver.id上加入GroupParticipant.driverId并获取Driver.driverIdentStr。
非常感谢任何帮助。
答案 0 :(得分:1)
这是有用的......
@Formula(“(从DRIVER d选择d.DRIVER_IDENT_STR,其中d.ID = DRIVER_ID)”)
我找到了答案: http://gokhan.ozar.net/hibernate-derived-properties-formula-annotation 在“一个更复杂的例子”标题下。
以下是我从阅读和示例中学到的内容......
谢谢!
答案 1 :(得分:0)
@Formula
注释被解释为SQL片段,因此假设基于映射的标准命名,以下内容应该有效:
@Formula("SELECT driverIdentStr FROM DRIVER WHERE id = driverId")
澄清:
driverIdentStr
是实体Driver
中映射到该属性的列名。id
是实体Driver
中的主键列名。driverId
是GroupParticipant
中的列名。DRIVER
。