如何在jpql查询中动态连接到表

bweufnob  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(261)

我需要根据列中的数据对表进行动态连接。e、 g表:待办事项

to_do_id | value | object_id | object_type

现在这里object\u type将是表名,object\u id将是该表的主键,因为我的to\u do表可以根据to\u do的类型与多个表连接
现在,当我想从相应的表中获取dos及其相应的数据时,我有以下步骤:
1-获取待办事项数据
2-根据对象类型在循环中获取相应的表数据
我们可以在jpql、hql或mysql中不使用循环吗?我需要避免循环也请建议,如果有任何更优化的方式

mw3dktmi

mw3dktmi1#

其中一个解决方案是在 ToDo 实体及相关 ToDoTask 实体类型。

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name = "TYPE")
public class Task {
  @Id
  @GeneratedValue
  private Integer id;
  @ManyToOne
  private TaskList taskList;
  @Column(name = "TYPE", insertable = false, updatable = false, nullable = false)
  private String type;
}

@Entity
@DiscriminatorValue("TYPE1")
public class SubTaskType1 extends Task {}

@Entity
@DiscriminatorValue("TYPE2")
public class SubTaskType2 extends Task {}

@Entity
public class ToDoList {
  @Id
  @GeneratedValue
  private Integer id;
  @OneToMany(mappedBy = "taskList")
  private List<Task> tasks;
}

你的代码应该变成:

ToDoList todos = todoRepository.findById( todoId );
for ( Task task : todos.getTasks() ) {
  // access task.getType() to get the discriminator type 
  // or
  // use instanceof to handle subclass casting
}

相关问题