How to customize JPA table name at runtime?

I have a problem when I have only one database, but I have several servers where I want them to use a different table name for each server.

My class is now configured as:

@Entity
@Table(name="loader_queue")
class LoaderQueue

I want to have a dev1 server point for the loader_queue_dev1 table, and a dev2 server for the loader_queue_dev2 table.

Is there a way I can do this with or without annotations?

I want to have one single assembly, and then at run time use something like a system property to change this table name.

+4
source share
2 answers

, . , :

public class ServerAwareNamingStrategy extends ImprovedNamingStrategy {

    @Override
    public String classToTableName(String className) {
        String tableName = super.classToTableName(className);
        return resolveServer(tableName);
    }

    private String resolveServer(String tableName) {
        StringBuilder tableNameBuilder = new StringBuilder();

        tableNameBuilder.append(tableName);
        tableNameBuilder.append("_");
        tableNameBuilder.append(System.getProperty("SERVER_NAME"));

        return tableNameBuilder.toString();
    }
}

Hibernate:

<property name="hibernate.ejb.naming_strategy" value="my.package.ServerAwareNamingStrategy"/>
+4

. JPA , , . , , .

, , :

  • , , . , , , .

  • NamingStrategy, , .

  • , ( ) .

+2

All Articles