Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In @Table(name = "tableName") - make "tableName" a variable in JPA

Tags:

java

jpa

ejb-3.0

I am using JPA and I need to make the "tableName" a variable.

In a database, I have many tables, and my code needs to access the table where I specify it to read.

@Entity
@Table(name = "tableName")
public class Database implements Serializable {...............}

Any ideas?

like image 862
zengr Avatar asked Mar 15 '10 03:03

zengr


3 Answers

You can do something like this, if thats your concern, I guess. Never tried it, its just a wild guess. But thats the usual practice -- I follow for Named Queries; yes, that's a different thing altogether.

@Entity
@Table(name = Database.tableName)
public class Database implements Serializable {
    public static final String tableName = "TABLE_1";
    ...............
}

But I don't see why anyone would do that. Could you tell us what are you up to? Why you have few tables exactly same definition?

[Edited]

I tried your solution. It did not work, it says: The value for annotation attribute Table.name must be a constant expression.

So, isn't that clear enough? I mean you can't do that. And I believe its quite logical. If you want Hibernate to generate your schema then you can define all the entities you want, in the schema, and with the appropriate relationships.

like image 182
Adeel Ansari Avatar answered Nov 18 '22 09:11

Adeel Ansari


Specifying the table name at runtime is not possible, this is simply not how JPA works (and I'm still not sure to get your requirement). Either map different entities on your set of tables and run various queries or build them dynamically (maybe using the Criteria API) depending on the input from the client side or use something else than JPA (like iBATIS).

like image 22
Pascal Thivent Avatar answered Nov 18 '22 10:11

Pascal Thivent


If you want only to reference/read the table name, it is possible as in the code below. If you want to change, it is not possible as Pascal said.

@Entity
@Table(name = Database.tableName)
public class Database implements Serializable {
    public static final String tableName = "TABLE_1";//this variable you can reference in other portions of your code. Of course you cannot change it.
    ...............
}
like image 3
V G Avatar answered Nov 18 '22 10:11

V G