我是一个试图学习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,但我不知道如何映射这个,因为我没有为它编写课程。我是否需要以不同的方式完成我的多对多关系并给它自己的课程?我忽视的任何其他方式都可以帮助我达到预期的效果吗?
如果您需要更多代码,我会发布。
答案 0 :(得分:1)
2种方法:
sql方式:
sessionFactory.getCurrentSession()。createNativeQuery(&#34; select * from systems_game s where s.game_id = 1&#34;)...
hibernate(java)方式:
game = session.createQuery(来自游戏,其中id = 1).uniqueResult() 列出系统= game.getSystems()
试试伪代码!
答案 1 :(得分:0)
HQL是关于对象的,你不应该坚持使用数据库架构。
from SYSTEM as s join s.games as g where g.id=:id
这就是你需要的。