Как избежать лишней таблицы при объединении двух столбцов в JPA? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть два класса A и B:

Это класс A

class A{
  private int id;
  private String name ;
  private String emailId;
  
  @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="aList")
  List<B> bList;
 
  // getter and setters 
}

Это класс B

class B{
  private int id;
  private int AId ;
  private String location;
  
  @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  List<A> aList;
 
  // getter and setters 
}

И это метод класса Dao, с помощью которого я пытаюсь получить объединенные данные.

public List<A> getA() {
        Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<A> criteria = builder.createQuery(A.class);
        Root<A> root = criteria.from(A.class);
        Join<A, B> joinList = root.join("bList", JoinType.LEFT);
        try{
            Predicate filters = builder.and(builder.equal(joinList.get("AId"),root.get("id")),
                    builder.equal(root.get("name"), "xxx"));
            
            criteria.where(filters);
            List<A> aList = (List<A>)session.createQuery(criteria).getResultList();
            return aList;
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

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

Спасибо

1 Ответ

1 голос
/ 12 июля 2020

Если я вас правильно понял. Оператор JOIN сам по себе не создает новые таблицы. Это скорее то, как вы описали свою сущность. Вы использовали отношение Many to many, которое создало другую таблицу. Эта таблица необходима для соответствия 3 нормальным формам базы данных.

Решение

  1. Подтвердите существование другой таблицы, пока вы не захотите сохранить согласованность своей БД и предотвратить утечку данных
  2. Переопределите свою сущность, чтобы она имела отношение Many to one или One to many
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...