2011-02-09 86 views
0

我正在尋找一種方法來一個實體與另一個實體純粹通過Hibernate關聯(沒有多餘的關係數據庫列映射),而不是需要單獨的DAO調用。我搜索周圍的解決方案,我能找到的唯一的事情就是@Formula 但我無法得到它的工作。試想一下:休眠:虛擬列

@Entity 
class CommonEntity { 
    @MagicAnnotation("maybe with HQL?") 
    private SuperEntity superEntity; 
} 

@Entity 
class SuperEntity { } 

這意味着,有時CommonEntitySuperEntity,我想對POJO本身吸氣所以它具有通過簡單get()訪問SuperEntity。有沒有乾淨地做到這一點,這樣,當我這樣做commonEntityDAO.get(1L);,其中1L是SuperEntity,則該實體將被設置?

在數據庫中的表看起來像:

table common_entity (common_entity_id int primary key, name string); 
table super_entity (super_entity_id int primary key, extra_field string, common_entity_id int); 
+0

你說CommonEntity是阿SuperEntity但在你的例子CommonEntity有SuperEntity。 – adrianboimvaser 2011-02-09 20:06:57

回答

0

因爲你有一個關係,這是繼承的主要候選。根據您喜歡的數據庫表示形式,有多種繼承策略。 check this

0

不能單純使用@OneToOne?您的數據庫模式看起來適合它。

@Entity 
class CommonEntity { 
    @OneToOne(mappedBy = "commonEntity") 
    private SuperEntity superEntity; 
} 

@Entity 
class SuperEntity { 
    @OneToOne 
    @JoinColumn(name = "common_entity_id") 
    private CommonEntity commonEntity; 
} 

注意,在這種情況下,你需要SuperEntity作爲一個擁有方的雙向關係,因爲它擁有的外鍵。