2016-10-05 3 views
0

テーブルの動的結合を列のデータごとに行う必要があります。 例えば 表:今ここにjpqlクエリでテーブルに動的に結合する方法

to_do_id | value | object_id | object_type 

to_dos OBJECT_TYPEは、テーブル名になりますし、私のto_doテーブルがto_do

の種類に応じて複数のテーブルを結合することができますのでOBJECT_IDは、そのテーブルの主キーになります私は、各テーブルからドスとそれぞれのデータに取得したいとき、今私は、次の手順をしている:

藤堂データが

PEとして、ループ内の各テーブルのデータを2-getを1-取得しますオブジェクトタイプ

JPQL、HQL、またはMysqlでループなしでこれを行うことはできますか?私は

答えて

0

一つsolutioはToDoエンティティと関連ToDoTaskエンティティタイプ間で多型の関連を用いることであろう任意のより最適化された方法がある場合にも提案してくださいループ を回避する必要があります。

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 
} 
:あなたのコードは、単純になるべき

@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; 
} 

関連する問題