2012-02-27 31 views
1

所以,我意識到這是從休眠的正常使用情況下,但是......如何使用反射檢查hibernate映射?

我使用Java反射來填充通過Hibernate的堅持與註釋配置DTO類。 我需要自反地找到@ManyToOne關係mappedBy屬性,以便將反向鏈接從一個設置爲多個。

代碼:

class Router{ 
@OneToMany(targetEntity = Port.class, cascade = CascadeType.ALL, mapped = "router", fetch = FetchType.LAZY) 
Collection<Port> ports; 
} 

class Port{ 
    @JsonBackReferene 
    @ManyToOne(cascade = {CascadeType.ALL, fetch = FetchType.LAZY) 
    Router router; 
} 

本能(和遞歸),我從填充路由器啓動的DTO。當端口具有所有屬性設置(自動協商等)時,它將返回到路由器以添加到portList。 Port.router字段未設置,因爲我無法找到一種方式來反射地獲取@ OneToMany.mappedBy值,這會讓我知道Port中的哪個字段設置爲Router實例。

任何意見是非常感謝!

謝謝!

+0

不回答你的問題,但你不認爲直接生成SQL不會更簡單嗎? – 2012-02-27 18:33:14

回答

2

您可以使用反射API。就像這樣:

Class Cls = ... ; 
cls.getField("xyz").getAnnotation(ManyToMany.class).mappedBy 
+0

謝謝!有用! – Jared 2012-02-27 20:32:04