通过foregin键对Hibernate对元素

时间:2015-09-25 09:31:20

标签: java hibernate

我的数据库中有两个表:

Wlasciciele

    @Entity
    @Table(name = "wlasciciele", schema = "telefony", catalog = "projektjava")
    public class WlascicieleEntity{

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;

        private String imie_nazwisko;

        @OneToMany
        @JoinColumn(name = "wlasciciel")
        private List<TelefonyEntity> telefonyEntities = new ArrayList<>();

   //getters and setters

   }

Telefony

  @Entity
@Table(name = "telefony", schema = "telefony", catalog = "projektjava")
public class TelefonyEntity{

    @Id
    private String numer;

    private String marka;
    private String model;
    private String typ;
    private int wlasciciel;

 //getters and setters
}

表通过一对多关系连接在一起。

显示为:

的所有Wlasciciele的列表
 @Override
    public List<WlascicieleEntity> listWlasciciele() {

        List<WlascicieleEntity> list = new ArrayList<>();
        Session session = HibernateUtil.openSession();
        session.beginTransaction();
        list = session.createQuery("from WlascicieleEntity").list();
        session.getTransaction().commit();
        session.close();

        return list;
    }

我的问题。保存2个表中数据的集合如何?因此,每个Wlasciciel分配了Telefon

编辑: 我的解决方案:

 Map<List<WlascicieleEntity>,List<TelefonyEntity>> map = new HashMap<>();

        List<WlascicieleEntity> listaWlascicieli = new ArrayList<>();
        List<TelefonyEntity> listaTelefonow = new ArrayList<>();

        List wlasciciele = session.createQuery("FROM WlascicieleEntity ").list();
        for(Iterator iterator1 = wlasciciele.iterator(); iterator1.hasNext();){

            WlascicieleEntity wlascicieleEntity = (WlascicieleEntity) iterator1.next();
            System.out.print(" Imie: " + wlascicieleEntity.getImie_nazwisko());

            listaWlascicieli.add(wlascicieleEntity);

            List telefony = wlascicieleEntity.getTelefonyEntities();


            for(Iterator iterator2 = telefony.iterator(); iterator2.hasNext();){
                TelefonyEntity telefonyEnity = (TelefonyEntity) iterator2.next();
                System.out.println(" Telefon: " + telefonyEnity.getMarka());

                listaTelefonow.add(telefonyEnity);
            }
            map.put(listaWlascicieli,listaTelefonow);

            System.out.println("\n");
        }

我是使用map和iterator完成的。还有另一种可能性,以便不使用迭代器类吗?

1 个答案:

答案 0 :(得分:0)

  

我想从第一个表中保存一组值,以及第二个表中的相关值

所以,你想要一个List<WlascicieleEntity>,并且在迭代每个WlascicieleEntity中包含的TelefonyEntity列表时,你不希望抛出一个惰性异常。

有两种解决方案:

  1. 不要关闭会话,直到你遍历TelefonyEntity的每个列表:列表将懒洋洋地加载。

  2. 一次获取所有内容:

    public List<WlascicieleEntity> listWlasciciele() {
    
        Session session = HibernateUtil.openSession();
        session.beginTransaction();
        List<WlascicieleEntity> list = session.createQuery(
            "select distinct w from WlascicieleEntity w"
            + " left join fetch w.telefonyEntities").list();
        session.getTransaction().commit();
        session.close();
    
        return list;
    }