Hibernate查询未映射的连接表

时间:2014-12-05 22:29:50

标签: java sql spring hibernate java-ee

我是一个试图学习Hibernate的J2EE新手。我有两个表,系统和游戏,以及一个名为Systems_game的连接表。

我希望能够输入game_id并获得该游戏的所有系统。

我在System.java和Game.java上使用Annotations来创建多对多关系。

@ManyToMany(targetEntity = System.class, cascade = { CascadeType.ALL })
@JoinTable(name="Systems_game",
            joinColumns = { @JoinColumn(name="game_id") },
            inverseJoinColumns = { @JoinColumn(name="system_id") })
private List<Game> games;

这是我用来尝试获得我想要的结果的方法。

@Override
public List getGameSystem(){
    return sessionFactory.getCurrentSession().createQuery("from Systems_game S WHERE S.game_id=1").list();              
}

当这个运行时,我得到了 &#34;请求处理失败;嵌套异常是org.hibernate.hql.ast.QuerySyntaxException:Systems_game未映射[来自Systems_game S WHERE S.game_id = 1]&#34;

我知道我的hibernate.cfg.xml文件中没有映射system_game,但我不知道如何映射这个,因为我没有为它编写课程。我是否需要以不同的方式完成我的多对多关系并给它自己的课程?我忽视的任何其他方式都可以帮助我达到预期的效果吗?

如果您需要更多代码,我会发布。

2 个答案:

答案 0 :(得分:1)

2种方法:

  1. sql方式:

    sessionFactory.getCurrentSession()。createNativeQuery(&#34; select * from systems_game s where s.game_id = 1&#34;)...

  2. hibernate(java)方式:

    game = session.createQuery(来自游戏,其中id = 1).uniqueResult() 列出系统= game.getSystems()

  3. 试试伪代码!

答案 1 :(得分:0)

HQL是关于对象的,你不应该坚持使用数据库架构。

from SYSTEM as s join s.games as g where g.id=:id

这就是你需要的。