有没有一种正确的方法可以在Spring + Hibernate中连接多个数据库表?

时间:2017-11-22 08:24:59

标签: java mysql spring hibernate join

我已经花了第二天阅读和测试这个问题,但它似乎没有去任何地方。

首先,数据库有4个主表:

  • 新兵,
  • 测试,
  • 评估员,
  • 评测,
  • 和几个连接表之间有外键(我现在可以修改连接)。

以下是表格连接的视觉效果:Image

我想在@Entity对象中连接所有这些对象,这些对象可以调用每个对应的属性。似乎有两种(???)方式来加入表格。第一个例子:

@Entity
@Table(name="recruits")
public class Recruit {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;

@Column(name="first_name")
...
    attributes
    ...

@ManyToMany(fetch=FetchType.EAGER,
        cascade= {CascadeType.DETACH, CascadeType.MERGE,
                CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(
        name="current_score",
        joinColumns=@JoinColumn(name="recruit_id"),
        inverseJoinColumns=@JoinColumn(name="test_id"))
private List<Test> tests;

@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL ) 
@JoinColumn(name="recruit_id")
private List<CurrentScore> currentScore;    

此处Recruit实体连接到Test表,然后连接到Current Score表。 这似乎不对,因为当前得分必须与特定的测试相对应,即使我从他们尝试的那样做,也似乎没有任何确定性。

我能想到的第二种方式是RecruitDAOImplementation类:

@Override
public List<Recruit> getAllRecruits() {

    Session session = sessionFactory.getCurrentSession();

    Query<Recruit> currentQuery = 
            session.createQuery("from Recruit", Recruit.class);

    List<Recruit> allRecruits = currentQuery.getResultList();

    return allRecruits;
}

我没有在任何教程中看到它,但是如果有人能够确认它是正确的方式以及它究竟应该返回什么 - 我很乐意这样做。

如果有人有任何示例如何改进/纠正这两个解决方案,请考虑另一个解决方案或解释的链接,这将真的有帮助!

0 个答案:

没有答案