java - 如何使用扩展类中的字段创建 HQL 查询

标签 java sql spring kotlin hql

我有这两个类:Locatable 和 Device,以便 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 ?(这是因为扩展到设备吗?)

谢谢

最佳答案

您的 Locatable 类正在扩展 Device,因此也扩展了父类(super class)的列。您的查询应该是正确的。

我在 Java 代码中经常使用此类查询,到目前为止没有任何问题。

关于java - 如何使用扩展类中的字段创建 HQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47636690/

相关文章:

java - App Engine + 云数据存储性能 : order in query or in memory?

sql - PostgreSQL : evaluate a substring inside function

java - @Async 不适合我

java - OAuth ForceServiceConnector 允许任何 Salesforce 用户访问相同的连接

java - 使用 Java API 获取 eBay 印度类别列表

mysql - 使用灵活的搜索查询选择随机行

mysql - 在不同的月份和总值上加入同一个表中的两个查询

java - JPA 软删除存储库 + 审核

spring - 使用 Spring AOP 获取特定的头参数?

java - 如果 WebAppContext 无法启动,如何取消启动或关闭 jetty