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

#java #hibernate #exception

#java #гибернация #исключение

Вопрос:

У меня есть две таблицы, обе с именами Language в двух разных схемах, давайте назовем их schema1 и schema2.

Когда я аннотирую модели для каждой из этих таблиц, мой код выглядит следующим образом: @Entity @Table(name=»language», catalog =»schema1″) Язык открытого класса {

 .....................

 @Entity
 @Table(name="language", catalog="schema2")
 public class Language {
 

Но при этом я получаю ошибку исключения аннотации следующим образом:

org.hibernate.Исключение AnnotationException: использование одного и того же имени объекта дважды: язык

Итак, означает ли это, что я не могу иметь таблицы с одинаковыми именами в двух разных схемах базы данных или я просто неправильно аннотирую свои модели?

Спасибо,

Эллиотт

Комментарии:

1. Вы пытались использовать атрибут схемы аннотации таблицы вместо каталога?

Ответ №1:

У меня была такая же проблема в сложной структуре классов, и приведенный выше ответ — это просто обходной путь. Вы можете определить аннотацию @Entity с помощью переменной name, чтобы отличать два класса друг от друга. Пример:

Класс 1:

 @Entity(name="language_v1")
@Table(name="language", catalog="schema1")
public class Language {
 

Класс 2:

 @Entity(name="language_v2")
@Table(name="language", catalog="schema2")
public class Language {   
 

Это позволит вам сохранить структуру вашего класса.

Ответ №2:

Оказывается, что модель в схеме 2 была объектом, который был расширением объекта модели в схеме 1. Hibernate не нравится такая конструкция, когда две таблицы называются одинаково. Создание второго объекта, не являющегося расширением первого, устранило проблему.