У меня этот класс называется 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, устройство выглядит следующим образом:
@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> }
но по какой-то причине он не работает для меня … возможно, я делаю это неправильно, спасибо
groupdId является сущностью Device, поэтому он должен быть
LEFT JOIN FETCH l.Device d WHERE d.groupId
вы указываете имя для соединения устройства и используете его при ссылке на столбец, принадлежащий устройству