Как получить список сущностей из одной таблицы в спящем режиме? - PullRequest
0 голосов
/ 08 февраля 2019

Рассмотрим эту схему

Hospital
----------
  id
  name
  email
  phone

Department
----------
  id
  name
  email
  phone

Relation
----------
  relationId
  Hospital_Id
  Department_id

Здесь each больница имеет many отделений.Таким образом, Hospital имеет отношение OneToMany к Departments.Hospital таблица имеет список больниц.Department таблица имеет список отделов.Relation таблица присоединяется к ним.Там нигде не используется внешний ключ.

Теперь рассмотрим эти pojos (для краткости удалены ненужные вещи)

public class Hospital {
    ...

    @OneToMany
    @JoinColumn(name="Hospital_ID")
    private Set<Relation> relations;

    ...
}

public class Department{
    ...

    @OneToMany
    @JoinColumn(name="Department_ID")
    private Set<Relation> relations;

    ...
}

public class Relation{
    ...

    @Id
    @Column(name = "relationId")
    private int relationId;

    @Column(name = "Hospital_ID")
    private int hospitalId;    

    @Column(name = "Department_ID")
    private int departmentId;    
    ...
}

Итак, мой вопрос: как мне получить список (или набор) отделений для любой конкретной больницы?То есть я хочу реализовать этот метод в Hospital pojo

public Set<Departments> getDepartments() {
    // Return set of departments corresponding to this(object) hospital
}

А также, как получить противоположное этому, то есть, как получить соответствующий объект больницы в классе Департамента?

1 Ответ

0 голосов
/ 09 февраля 2019

Вот, пожалуйста.Надеюсь, поможет.Cheers!

Редактировать: Файл ciber в Hibernate находится в:

"rootDir \ bin \ hibernate.cfg.xml"

public class EntityManager
{
    // Creates a factory, that creates sessions.
    private SessionFactory factory;

    /**
     * Constructor. Initially connect to the database.
     */
    public EntityManager()
    {
        this.factory = new Configuration().configure("hibernate.cfg.xml")
            .buildSessionFactory();
    }

    /**
     * Closes the session factory.
     */
    public void close()
    {
        this.factory.close();
    }

    /**
     * Loads the objects of your entity from the database.
     */
    public List<YourEntity> loadEntities()
    {
        Session session = factory.getCurrentSession();

        try
        {
            session.beginTransaction();
            @SuppressWarnings("unchecked")
            Query<YourEntity> createQuery = session
                .createQuery("from YourEntity");
            List<YourEntity> result = createQuery.list();

            session.getTransaction()
                .commit();
            return result;
        }
        finally
        {
            session.close();
        }
    }

    /**
     * Loads entity by id.
     */
    public EntityA loadEntity(long entityId)
    {
        Session session = factory.getCurrentSession();
        try
        {
            session.beginTransaction();
            EntityA entity = session.get(EntityA.class, entityId);

            return entity;
        }
        finally
        {
            session.close();
        }
    }

    /**
     * Saves your entity to database.
     */
    public void saveEntity(YourEntityA entityA)
    {
        Session session = factory.getCurrentSession();
        try
        {
            session.beginTransaction();
            session.save(entityA);
            session.getTransaction()
                .commit();
        }
        finally
        {
            session.close();
        }
    }
}
...