Как я могу получить объект, имеющий отношение «один ко многим», с другим объектом, который имеет отношение «один ко многим»? - PullRequest
0 голосов
/ 21 июня 2019

В моем проекте у меня есть три объекта: A, B и C:

@Entity
@Table(name = "ta_testA",catalog = "mytesdb")
public class A{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="fiIdA")
    private int fiIdA;
    @OneToMany(mappedBy ="a", cascade = CascadeType.ALL, fetch =    FetchType.EAGER, orphanRemoval = true)
    private List<B> b

....(getters and setters)
}

@Entity
@Table(name = "ta_testB",catalog = "mytesdb")
public class B{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="fiIdB")
    private int fiIdB;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="fiIdA")
    private A a;
    @OneToMany(mappedBy ="b", cascade = CascadeType.ALL, fetch =    FetchType.EAGER, orphanRemoval = true)
    private List<C> c

....(getters and setters)
}

@Entity
@Table(name = "ta_testC",catalog = "mytesdb")
public class C{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="fiIdC")
    private int fiIdC;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="fiIdb")
    private B b;

....(getters and setters)
}

public class ADAO extends CoreDAO {

    public A getAById(int id) {
        startOp();
        A a;
        try{
            sesion.flush();
            sesion.clear();
            Query query =  sesion.createQuery("Select a from"
                    + " A as a where "
                    + " (a.fiIdA = :id)");

            a = (A) query.setParameter("id",id).uniqueResult();

        }catch(HibernateException he){
            System.out.println(he.getMessage());
            throw he;
        }finally{
            sesion.close();
        }
        return a;
    }
}

public class BDAO extends CoreDAO {

    public B getBById(int id) {
        startOp();
        B b;
        try{
            sesion.flush();
            sesion.clear();
            Query query =  sesion.createQuery("Select b from"
                    + " B as b where "
                    + " (b.fiIdB = :id)");

            b = (B) query.setParameter("id",id).uniqueResult();

        }catch(HibernateException he){
            System.out.println(he.getMessage());
            throw he;
        }finally{
            sesion.close();
        }
        return b;
    }

}

Все работает нормально, если я получаю Объект по идентификатору с использованием Entity A DAO, но если меня интересует только получение данных сущности B, свойство List становится беспорядочным и возвращает много повторяющихся данных.

Как я могу получить только данные от объекта B, пропуская проблему дублирующих данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...