В @Table (name = "tableName" ) - сделайте "tableName" переменной в JPA

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

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

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

Любые идеи?

Ответ 1

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

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

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

[Отредактировано]

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

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

Ответ 2

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

@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.
    ...............
}

Ответ 3

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

Ответ 4

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

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

@Subselect("")

вместо:

@Table(name = "tableName").