我正在使用JPA,我需要将"tableName"变为变量.
在数据库中,我有很多表,我的代码需要访问我指定要读取的表.
@Entity
@Table(name = "tableName")
public class Database implements Serializable {...............}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
(注意:我对Java非常熟悉,但不熟悉Hibernate或JPA - 但:)
我想编写一个通过JPA与DB2/400数据库通信的应用程序,现在我可以获取表中的所有条目并将它们列出到System.out(使用MyEclipse进行逆向工程).我知道@Table注释导致名称与类静态编译,但我需要能够使用一个表,其中名称和模式在运行时提供(他们的定义是相同的,但我们有很多他们).
显然这不是那么容易做到的,我很欣赏这一点.
我目前选择Hibernate作为JPA提供程序,因为它可以处理这些数据库表没有记录.
所以,问题是,我如何在运行时告诉JPA的Hibernate实现,类A对应于数据库表B?
(编辑:在Hibernate NamingStrategy中重写的tableName()可能允许我解决这个内在限制,但我仍然希望与供应商无关的JPA解决方案)
所以我有这个现有的数据库模式,其中包含许多我想用JPA/Hibernate建模的表.每个表具有相同的30个附加列组(以允许运行时扩展记录的字段数).
CREATE TABLE XX
(
"ID" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"USER_LABEL" VARCHAR2(256 BYTE),
"CREATION_DATE" NUMBER(38,0) NOT NULL ENABLE,
"ADD_STR_FIELD_0" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_0" NUMBER(38,0),
"ADD_DBL_FIELD_0" NUMBER(38,0),
"ADD_STR_FIELD_1" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_1" NUMBER(38,0),
"ADD_DBL_FIELD_1" NUMBER(38,0),
"ADD_STR_FIELD_2" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_2" NUMBER(38,0),
"ADD_DBL_FIELD_2" NUMBER(38,0),
"ADD_STR_FIELD_3" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_3" NUMBER(38,0),
"ADD_DBL_FIELD_3" NUMBER(38,0),
"ADD_STR_FIELD_4" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_4" NUMBER(38,0),
"ADD_DBL_FIELD_4" NUMBER(38,0),
"ADD_STR_FIELD_5" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_5" NUMBER(38,0),
"ADD_DBL_FIELD_5" NUMBER(38,0),
"ADD_STR_FIELD_6" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_6" NUMBER(38,0),
"ADD_DBL_FIELD_6" NUMBER(38,0),
"ADD_STR_FIELD_7" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_7" NUMBER(38,0),
"ADD_DBL_FIELD_7" NUMBER(38,0),
"ADD_STR_FIELD_8" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_8" NUMBER(38,0), …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我只有一个数据库可供使用,但我有多个服务器,我希望他们为每个服务器使用不同的表名.
现在我的班级被配置为:
@Entity
@Table(name="loader_queue")
class LoaderQueue
Run Code Online (Sandbox Code Playgroud)
我希望能够让dev1服务器指向loader_queue_dev1表,dev2服务器指向loader_queue_dev2表.
有没有办法可以使用或不使用注释来做到这一点?
我希望能够有一个单独的构建,然后在运行时使用类似系统属性的东西来更改该表名.
在我的项目中,我需要在运行时在数据库之间切换.我试图使用Hibernate,但卡在一个地方,我需要用数据库中的表映射对象.问题是,我有几个带前缀的表:documents2001,documents2002 ......据我所知,我无法在运行时使用表映射类.我尝试使用iBatis,但问题是在运行时期间数据库更改.在iBatis中,这很难做到.
也许有些建议,我该怎么用?
我的要求:
更新:
好的,我将尝试解释:
我必须编写应用程序,它可以在运行时连接到不同的数据库.app的用户可以选择,连接哪个数据库.所有数据库都具有相同的结构.除此之外,用户还可以在数据库中的表之间切换.表具有相同的结构.
也许我可以使用另一种工具?