我有一个`documents`表
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
有一对一的关系。文档实体声明连接的继承和派生的订单,发票,...实体使用@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名代表的人都可以为我创建“加入继承”标签,如果他觉得这样做并将其附加到我的问题上吗?非常感谢。
答案 0 :(得分:1)
这将是提供者特定的,因为您需要访问内部JPA元数据,除非您自己处理所有注释/ xml,或者在表和类之间定义您自己的硬编码映射。
对于EclipseLink,您可以从EntityManagerFactory中解开EclipseLink会话并访问所有描述符。
for (ClassDescriptor descriptor : emf.unwrap(Session.class).getDescriptors().values()) {
Class entityClass = descriptor.getJavaClass();
List<String> tables = descriptors.getTableNames();
}