java - Hibernate 查询未映射的连接表

标签 java sql spring hibernate jakarta-ee

我是一名 J2EE 新手,正在尝试学习 Hibernate。我有两个表: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 文件中没有映射 systems_game,但我不知道如何映射它,因为我没有它的类。我是否需要以不同的方式建立多对多关系并为其提供自己的类?我忽略的任何其他方法可以帮助我实现预期的结果吗?

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

最佳答案

有两种方法可以做到这一点:

  1. sql方式:

    sessionFactory.getCurrentSession().createNativeQuery("从systems_game s中选择*,其中s.game_id=1")...

  2. hibernate(java)方式:

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

试试伪代码吧!

关于java - Hibernate 查询未映射的连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325728/

相关文章:

java - 使用 spring 注释时是否有必要使用 @Configuration

java - 为什么在 Java EE 中使用 CDI

mysql - 连接并打印单元格中具有多个值的列的搜索结果

SQL 从时间戳差异中提取值

java - 将对象传递到数据库时,调试器说属性有变量,但是当打印 result.hasErrors 时,它是 null

java - 将动态值作为请求正文发布

SQL DB2 - WHERE 子句中的条件逻辑

web-applications - 500 错误 Weblogic 服务器

java - ScrollPane 内的 JTable 仅在调整大小后显示

java - 当 onCreate() 方法调用时如何插入第一行值静态,而其他方法在单击数据库中的按钮时将是动态的?