JPA2获取列元数据(type,lenth,nullable等)

时间:2015-06-11 22:54:48

标签: hibernate jpa-2.0

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

1 个答案:

答案 0 :(得分:0)

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

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

请注意某些数据库无法使用某些密钥生成机制,应该避免这些机制真正与数据库无关。

在字段上使用@Column注释,您可以定义可空,长度等。如果使用"数据类型"如果要保持与数据库无关,则使用跨数据库类型成为您的责任。

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

- 替代

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

请注意,您可能需要稍微调整映射/模型以使其真正与数据库无关,因为生成的@ Entity映射可能反映了在第一个中用于创建模型的某些特定于数据库的数据类型的地方。

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

即使有可能,我也不相信JPA是检查数据库类型的正确工具。所以如果通过"检索"你的意思是在运行时检查和适应......你可能更善于使用直接JDBC。如果您需要在运行时检查DB并做出相应的反应,那么它与DB无关的代码相反,您可以处理所有可能的情况。