2013-06-18 40 views
0

發現類我有一個`documents`表JPA:從表名

CREATE TABLE `documents` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`docnum` int(11) default null, 
`docdate` DATE default NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

和相應的文件@Entity。然後我有一個orders,invoices和其他與documents有1對1關係的表。文檔實體聲明已加入繼承和派生訂單,發票,...實體使用@PrimaryKeyJoinColumn。一切按預期工作。

然後我有一個建立各種文件類型之間的一些弱關係的表:

CREATE TABLE IF NOT EXISTS `documents_xref` (
    `id` int(11) not null auto_increment primary key, 
    `xrefdate` DATE not null, 
    `src_doc` int(11) not null, 
    `src_doc_tablename` VARCHAR(250) not null, 
    `dst_doc` int(11) not null unique, 
    `dst_doc_tablename` VARCHAR(250) not null, 
    INDEX(`src_doc`), 
    CONSTRAINT FOREIGN KEY (`src_doc`) REFERENCES `documents` (`id`), 
    CONSTRAINT FOREIGN KEY (`dst_doc`) REFERENCES `documents` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; 

現在我需要顯示文檔之間的關係的曲線圖,圖中的每個節點必須告訴什麼類型的文件它是,所以我需要從表名找到@Entity類。除了蠻力之外,還有其他方法可以從JPA2中獲得嗎?

關於旁註:任何有1500位代表的人都可以爲我創建「加入繼承」標籤,如果他覺得這樣做並附加到我的問題?非常感謝。

回答

1

這將是提供程序特定的,因爲您需要訪問內部JPA元數據,除非您自己處理所有註釋/ xml,或在表和類之間定義自己的硬編碼映射。

對於EclipseLink,您可以從EntityManagerFactory中展開EclipseLink會話並訪問所有描述符。

for (ClassDescriptor descriptor : emf.unwrap(Session.class).getDescriptors().values()) { 
    Class entityClass = descriptor.getJavaClass(); 
    List<String> tables = descriptors.getTableNames(); 
} 
+0

謝謝,我使用Hibernate,但我不想綁定我的代碼,也沒有任何其他提供者。然後,我將自己處理註釋。 –