我需要根据列中的数据对表进行动态连接。 例如 table:to_dos
to_do_id | value | object_id | object_type
现在这里object_type将是表名,object_id将是该表的主键,因为我的to_do表可以根据to_do的类型与多个表连接
现在,当我想从各个表中获取dos及其各自的数据时,我有以下步骤:
1-todo数据
2 - 根据对象类型
在循环中获取相应的表数据我们可以在没有JPQL,HQL或Mysql循环的情况下执行此操作吗?我需要避免循环 还请建议是否有更优化的方式
答案 0 :(得分:0)
一个解决方案是使用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
}