【问题标题】:How to create hql query with left join using field from extending object如何使用扩展对象中的字段创建具有左连接的 hql 查询
【发布时间】:2017-12-04 12:53:50
【问题描述】:

我有一个叫做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 extended Device,Device 如下所示:

@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>
}

但由于某种原因它对我不起作用......可能我做错了, 谢谢

【问题讨论】:

    标签: java sql spring kotlin hql


    【解决方案1】:

    groupdId 是实体 Device 所以应该是

    LEFT JOIN FETCH l.Device d WHERE d.groupId 
    

    您为设备连接命名并在引用属于设备的列时使用该名称

    【讨论】:

    • 它不工作......但我认为这是工作:“SELECT l FROM Locatable l WHERE l.groupId IN ?1”
    • 我想我只能这样做 bc 可定位扩展设备
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2021-10-09
    • 2012-08-24
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多