如何使用扩展对象中的字段使用左连接创建hql查询

时间:2017-12-04 12:53:50

标签: java sql spring kotlin hql

我有一个名为Locatable的类:

 @Entity
 @Table(name = "locatable")
 @PrimaryKeyJoinColumn(name = "device_id", referencedColumnName = "id")
 open class Locatable: Device() {

 @Basic
 @Column(name = NAME_COLUMN)
 var name: String? = null
    }

如您所见,Locatable扩展设备,设备如下所示:

@Entity
@Table(name = "device")
@Inheritance(strategy = InheritanceType.JOINED)
abstract class Device {

 @Id
 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGen")
@SequenceGenerator(name = "sequenceGen", sequenceName = "devices_id_seq", allocationSize = 1)
@Column(name = ID_COLUMN)
open var id: Long = 0

@Basic
@Column(name = GROUP_COLUMN)
open var groupId: Long = 0
}

现在,我试图使用像这样的hql进行回购:

interface LocatableRepo : JpaRepository<Locatable, Long> {

  @Query("SELECT l FROM Locatable l LEFT JOIN FETCH l.Device WHERE l.groupId IN ?1")
fun getByGroupIdIn(ids: List<Long>): List<Locatable>
}

但由于某种原因,它不适合我...可能我做错了, 谢谢

1 个答案:

答案 0 :(得分:0)

groupdId是实体设备,因此它应该是

LEFT JOIN FETCH l.Device d WHERE d.groupId 

您为设备联接命名,并在引用属于设备的列

时使用该名称