2016-10-05 22 views
0

我需要根據列中的數據對錶格進行動態連接。 如 表:to_dos如何在jpql查詢中動態加入表格

to_do_id | value | object_id | object_type 

現在這裏OBJECT_TYPE將表名和OBJECT_ID將是該表的主鍵,因爲我to_do表可以有根據類型的to_do

多表連接現在,當我想獲取來自各表DOS和其各自的數據我有以下步驟:

1獲得待辦事項數據

2獲得環路PE各表中的數據r對象類型

我們可以在JPQL,HQL或Mysql中無循環嗎?我需要避免循環 也請建議,如果有任何更優化的方式

回答

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 
}