В @Table (name = "tableName") - сделать "tableName" переменной в JPA - PullRequest
13 голосов
/ 15 марта 2010

Я использую JPA, и мне нужно сделать переменную tableName.

В базе данных у меня много таблиц, и мой код должен получить доступ к таблице, в которой я указываю его для чтения.

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

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 15 марта 2010

Вы можете сделать что-то вроде этого, если это ваше беспокойство, я думаю. Никогда не пробовал, просто дикая догадка . Но это обычная практика - я следую за Named Queries; да, это совсем другое.

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

Но я не понимаю, почему кто-то сделал бы это. Не могли бы вы рассказать нам, что вы делаете? Почему у вас есть несколько таблиц точно такого же определения?

[Изменено]

Я попробовал ваше решение. Это не работа, это говорит: значение для атрибут аннотации Table.name должен быть постоянным выражением.

Так, разве это не достаточно ясно? Я имею в виду, вы не можете этого сделать. И я считаю, что это вполне логично. Если вы хотите, чтобы Hibernate сгенерировал вашу схему, вы можете определить все сущности, которые вы хотите, в схеме и с соответствующими отношениями.

3 голосов
/ 11 февраля 2013

Если вы хотите только ссылаться / читать имя таблицы, это возможно, как в коде ниже.Если вы хотите измениться, это невозможно, как сказал Паскаль.

@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.
    ...............
}
2 голосов
/ 15 марта 2010

Указание имени таблицы во время выполнения невозможно, это просто не то, как работает JPA (и я все еще не уверен, чтобы получить ваше требование). Либо сопоставьте разные сущности в вашем наборе таблиц и выполняйте различные запросы, либо создавайте их динамически (возможно, с использованием Criteria API) в зависимости от входных данных со стороны клиента или используйте что-то еще, кроме JPA (например, iBATIS).

0 голосов
/ 07 июля 2014

Если вы хотите выбрать данные из разных таблиц,

тогда вы можете использовать:

@Subselect("")

вместо:

@Table(name = "tableName").

...