我试图了解具有不同关系和获取模式的Hibernate逻辑。我的问题在这里:
Student对象和Advisor对象之间存在一对一的Fetch.EAGER关系。如果没有,下面的代码将会是什么结果。 23名学生,没有。 25名学生有同样的顾问,为什么?
Session session = sessionFactory.openSession();
Student st1 = session.load(Student.class , 23 );
Student st2 = session.load(Student.class , 25 );
System.out.println(st1.getAdvisor() == st2.getAdvisor());
session.close();
session = sessionFactory.openSession();
Student st3 = session.load(Student.class , 23);
System.out.println(st1 == st3);
session.close();
答案 0 :(得分:0)
System.out.println(st1.getAdvisor() == st2.getAdvisor());
在上面一行的代码输出中永远不会 true
,因为==
会检查相同的引用。
您正在寻找的是:
System.out.println(st1.getAdvisor().equals(st2.getAdvisor()));
确保在equals()
课程中重写了Advisor
(例如,与主键进行比较)。
System.out.println(st1 == st3);