2016-10-05 2 views
0

machen Ich muss dynamische Joins zu Tabelle gemäß den Daten in Spalte. zB Tabelle: to_dosWie dynamische Join zu Tabellen in Jpql-Abfrage

to_do_id | value | object_id | object_type 

hier Jetzt wird object_type der Tabellenname und object_id wird Primärschlüssel der Tabelle, weil meine to_do Tabelle mit mehreren Join-Tabelle haben kann je nach Art der to_do

nun, wenn ich zu DOS und seine jeweiligen Daten von den jeweiligen Tisch holen will, muss ich folgende Schritte:

1-erhalten Todo Daten

2-erhalten jeweiligen Tabellen Daten in Schleife als pe r der Objekttyp

Können wir dies ohne Schleife in JPQL, HQL oder in Mysql tun? Ich muß Schleife vermeiden auch vorschlagen, bitte, ob es eine optimierte Art und Weise ist

Antwort

0

Ein solutio polymorphe Assoziationen zwischen der ToDo Einheit und den damit verbundenen ToDoTask Entitätstypen zu verwenden wäre.

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

Code sollte dann einfach geworden:

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 
}