我有这两个类:可定位和设备,以便Locatable扩展设备: 的可定位:
@Entity
@Table(name = Locatable.TABLE_NAME)
@PrimaryKeyJoinColumn(name = "device_id", referencedColumnName = "id")
open class Locatable: Device() {
@Basic
@Column(name = NAME_COLUMN)
var name: String? = null
}
设备:
@Entity
@Table(name = Device.TABLE_NAME)
@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
}
正如您所见, groupId 字段仅存在设备 现在,我想做这个回购:
interface LocatableRepo : JpaRepository<Locatable, Long> {
@Query("SELECT l FROM Locatable l WHERE l.groupId IN ?1")
fun getByGroupIdIn(ids: List<Long>): List<Locatable>
}
我的问题是,如果我做得对,还是应该使用左连接提取? 因为groupId不在Locatable中,这意味着它不在 l 中,所以如何使用 l.groupId ?(这是因为扩展到设备?)< / p>
谢谢
答案 0 :(得分:0)
您的类Locatable正在扩展Device,因此也扩展了超类的列。您的查询应该是正确的。
我在Java代码中经常使用此类查询,到目前为止没有任何问题。