2017-01-25 40 views
0

我正在使用Hibernate並試圖在我的實體中爲SELECT查詢構建下一個邏輯。創建一個連接列,如果教授的值爲name = NULL,則選擇教師姓名的值。當值爲1時,Hibernate實體連接替換值2 NULL

規範教師表:

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

代碼教授表:

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

工作SQL查詢例子:

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) 

我應該在我的實體更改複製邏輯以上的SQL查詢?非常感謝您提供的任何幫助。

回答

0

我不確定您是否可以在字段(name)級別提供註釋以實現此目的。
我的猜測是,如果類似的東西存在,那麼它可能會導致更新也表現相同的方式。 (重寫教師與教授的名字)

幾個其他的解決方案:

  1. Hibernate的Formula註釋:
    創建另一個變量說actualName並提供公式的註記與合併(我用它之前返回另一場當一個字段爲空時)

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

    我不知道,如果你可以在它使用映射的實體,如果不是你已經利用JoinColumnOrFormula註釋及寫的查詢。

  2. 爲此創建一個吸氣器新字段actualName它將檢查教授姓名是否存在然後返回。否則返回老師的名字。這將消除編寫另一個查詢的需要。

  3. 您還可以修改教師課程中的name字段的獲取方,以返回您想要的其他字段。 注意:如果教授的名字存在,這也會導致您在教師桌上的更新操作將教師姓名替換爲教授姓名。根本不推薦

+0

謝謝你的幫助。我發現第二個解決方案很有用。 – Edster