我的数据库中有两个表:
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完成的。还有另一种可能性,以便不使用迭代器类吗?
答案 0 :(得分:0)
我想从第一个表中保存一组值,以及第二个表中的相关值
所以,你想要一个List<WlascicieleEntity>
,并且在迭代每个WlascicieleEntity
中包含的TelefonyEntity列表时,你不希望抛出一个惰性异常。
有两种解决方案:
不要关闭会话,直到你遍历TelefonyEntity的每个列表:列表将懒洋洋地加载。
一次获取所有内容:
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;
}