使用Hibernate注释映射表的一列

时间:2016-07-26 23:20:20

标签: 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 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。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这是有用的......

@Formula(“(从DRIVER d选择d.DRIVER_IDENT_STR,其中d.ID = DRIVER_ID)”)

我找到了答案: http://gokhan.ozar.net/hibernate-derived-properties-formula-annotation 在“一个更复杂的例子”标题下。

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

  1. 只有公式注释中的SQL(根本没有HQL)
  2. 在找到上面的例子之前,我在WHERE中使用了 d。,但在Formula查询的SELECT部分​​没有使用,而Hibernate抱怨了。那时,我认为Hibernate忽略了我的公式注释并试图从主表中获取值,但它并没有忽略我的公式,我的公式基本上是告诉它从主表中获取值(因为 d 。不习惯另有说法。)
  3. 谢谢!

答案 1 :(得分:0)

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

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

澄清:

  1. driverIdentStr是实体Driver中映射到该属性的列名。
  2. id是实体Driver中的主键列名。
  3. driverIdGroupParticipant中的列名。
  4. 如果您的数据库区分大小写,我使用了显式表名DRIVER