2017-01-25 2 views
0

Ich verwende Hibernate und versuchen, die nächste Logik in meiner Entität für SELECT Abfrage erstellen. Erstellen Sie eine Join-Spalte, in der, wenn der Wert von Professor name = NULL, dann Wert des Namens des Lehrers auswählen.Hibernate Entity Join Ersatzwert2, wenn Wert1 NULL

-Code für Lehrertisch:

@Entity 
@Table(name = "teacher") 
public class Teacher { 

@Id 
@Column(name = "id_number) 
private String id; 

@OneToOne 
@JoinColumn(name = "t_name") 
private Professor name; 

// Getters and Setters ... 
} 

-Code für Professor Tabelle:

@Entity 
    @Table(name = "professor") 
    public class Professor{ 

    @Id 
    @Column(name = "id_number) 
    private String id; 

    @Column(name = "p_name") 
    private String name; 

    // Getters and Setters ... 
    } 

Arbeits SQL-Abfrage Beispiel:

select 
    t.id_number     as "Identification Number", 
    isnull(p.p_name, t.t_name) as "Name" 
from teacher t 
left join professor p 
on t.t_name = p.p_name 
where id_number in (23, 24, 25, 26, 27) 

Was soll ich in meinen Entitäten ändern Logik zu replizieren der obigen SQL-Abfrage? Werde wirklich dankbar für jede Hilfe sein.

Antwort

0

Ich bin nicht sicher, ob Sie eine Annotation auf Feld (name) stellen können, um dies zu erreichen.
Meine Vermutung ist, wenn so etwas vorhanden ist, könnte es dazu führen, dass sich das Update genauso verhält. (Außer Kraft setzen Lehrernamen des Professors)

Paar von anderen Lösungen:

  1. Hibernate Formula Anmerkung:
    Erstellen Sie eine weitere Variable sagen actualName und bieten Formel Annotation mit Coalesce (habe ich es vor ein anderes Feld zurückzukehren wenn ein Feld null war).

    @Formula("COALESCE(nullableField, backupField)") 
    

    Ich bin mir nicht sicher, ob Sie ein zugeordnetes Unternehmen in sie verwenden können, wenn nicht Sie von JoinColumnOrFormula Anmerkung zu machen haben und eine Abfrage für diese schreiben.

  2. erstellen Getter für diesen neues FeldactualName die Namen zurückgeben vorhanden dann, wenn Professors ist prüft. sonst den Namen des Lehrers zurückgeben. Dadurch entfällt die Notwendigkeit, eine weitere Abfrage zu schreiben.

  3. Sie könnten auch den Getter des Feldes name in der Lehrerklasse ändern, um ein anderes Feld zurückzugeben, das Sie möchten. HINWEIS: Dies führt auch dazu, dass Ihr Aktualisierungsvorgang auf dem Lehrertisch den Namen des Lehrers durch den Namen des Professors ersetzt, wenn der Name des Professors vorhanden ist. Überhaupt nicht empfohlen

+0

Vielen Dank für Ihre Hilfe. Ich finde eine zweite Lösung sehr nützlich. – Edster