【问题标题】:Hibernate Query for unmapped join table未映射连接表的休眠查询
【发布时间】:2014-12-05 22:29:49
【问题描述】:

我是一名尝试学习 Hibernate 的 J2EE 新手。我有两个表,System 和 Game,以及一个名为 Systems_game 的连接表。

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

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

@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();              
}

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

我知道我的 hibernate.cfg.xml 文件中没有系统游戏映射,但我不知道如何映射它,因为我没有一个类。我是否需要以不同的方式处理我的多对多关系并赋予它自己的类?我忽略的任何其他方式可以帮助我达到预期的结果?

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

【问题讨论】:

    标签: java sql spring hibernate jakarta-ee


    【解决方案1】:

    两种方法:

    1. sql方式:

      sessionFactory.getCurrentSession().createNativeQuery("select * from systems_game s where s.game_id=1")...

    2. 休眠(java)方式:

      game = session.createQuery(from game where id = 1).uniqueResult() 列出系统 = game.getSystems()

    试试伪代码吧!

    【讨论】:

      【解决方案2】:

      HQL 是关于对象的,您不应该拘泥于您的数据库架构。

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

      这就是你需要的。

      【讨论】:

        猜你喜欢
        • 2021-09-24
        • 2013-01-04
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 2016-02-05
        相关资源
        最近更新 更多