JPA2 获取列元数据(类型、长度、可为空等)

JPA2 get column metadata (type, lenth, nullable, etc)

title 说明了一切,我正在研究一个基于 JPA2(通过 Hibernate 4.0)的数据层,它需要与数据库无关,我正在尝试检索 table(与 @Entity 相关联)是否可为空,类型是什么,最重要的是,如果它是 varchar,它有多长。

您可以使用 JPA @Entity 创建一个数据库不可知模型,这意味着您的模型将使用不同的数据库。

通常,您编写 @Entity,使用 SchemaGenerator 工具(或其他工具)生成正确的 DDL,该工具将为特定数据库(使用指定的方言)创建正确的语句。您的架构与数据库无关,但在运行时,必须指定正确的方言。

请注意,某些密钥生成机制对某些数据库不可用,应避免真正与数据库无关。

在字段上使用@Column 注释,您可以定义可为空、长度等。如果您使用"datatype" 属性,则您有责任根据需要使用跨数据库类型保持数据库不可知。

还有其他@Temporal 和@Enumarated 可以影响生成的数据类型。

--备选方案

您还可以将现有 table 映射到实体。还有一些工具可以做到这一点。例如:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jpt.doc.user%2Ftasks021.htm

请注意,您可能需要稍微调整您的映射/模型才能真正与数据库无关,因为生成的@Entity 映射可能反映了最初用于创建模型的某些特定于数据库的数据类型。

据我所知,一般来说,JPA 本身与数据库无关,除非您强制使用数据类型或使用不受支持的密钥生成机制。它是创建与数据库无关的模型的正确框架。

即使可能,我也不认为 JPA 是检查数据库类型是否运行时的正确工具。因此,如果 "retrieve" 你的意思是在运行时检查和调整......你最好直接使用 JDBC。如果您需要在运行时检查数据库并做出相应的反应,这与数据库无关代码相反,您将处理所有可能的情况。