Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance JPA:从表名查找类_Inheritance_Jpa_Orm - Fatal编程技术网

Inheritance JPA:从表名查找类

Inheritance JPA:从表名查找类,inheritance,jpa,orm,Inheritance,Jpa,Orm,我有一张“文件”桌 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 和相应的文档@实体。然后我有一个订单,发票和其他类似的表格,它们与文档有1对1的关系。文档实体声明联合继承和派生

我有一张“文件”桌

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 
和相应的文档@实体。然后我有一个
订单
发票
和其他类似的表格,它们与
文档
有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获得它吗


另一方面:如果有人愿意为我创建“joined Inheritation”标记并将其附加到我的问题上,那么有1500个代表的人是否可以为我创建该标记?非常感谢。

这将是特定于提供者的,因为您需要访问内部JPA元数据,除非您自己处理所有注释/xml,或者定义自己的表和类之间的硬编码映射

对于EclipseLink,您可以从EntityManagerFactory打开EclipseLink会话并访问所有描述符

for (ClassDescriptor descriptor : emf.unwrap(Session.class).getDescriptors().values()) {
  Class entityClass = descriptor.getJavaClass();
  List<String> tables = descriptors.getTableNames();
}
for(类描述符描述符:emf.unwrap(Session.class.getDescriptors().values()){
类entityClass=descriptor.getJavaClass();
列表表=描述符。getTableNames();
}

谢谢,我正在使用Hibernate,但我不想将我的代码绑定到它,也不想绑定到任何其他提供程序。然后我将自己处理注释。