【问题标题】:JPA: finding class from table nameJPA:从表名中查找类
【发布时间】:2013-06-15 01:25:19
【问题描述】:

我有一个`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。然后我有一个ordersinvoices 和其他与documents 具有一对一关系的类似表。 Documents 实体声明联合继承和派生的 Orders、Invoices、...实体使用 @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 代表的任何人愿意为我创建“联合继承”标签并将其附加到我的问题中,他是否可以这样做?非常感谢。

【问题讨论】:

    标签: inheritance jpa orm


    【解决方案1】:

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

    对于 EclipseLink,您可以从 EntityManagerFactory 解包 EclipseLink 会话并访问所有描述符。

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

    【讨论】:

    • 谢谢,我正在使用 Hibernate,但我不想将我的代码绑定到它或任何其他提供程序。那我自己处理注解吧。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多