休眠查询未映射连接表
问题描述:
我是一个尝试学习Hibernate的J2EE新手。我有两个表,System和Game,以及一个名为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();
}
当该运行时,我得到
“请求处理失败;嵌套的异常是org.hibernate.hql.ast.QuerySyntaxException:Systems_game未映射[从Systems_game S其中S.game_id = 1]”
我知道我的hibernate.cfg.xml文件中没有映射systems_game,但我不知道如何映射它,因为我没有它的类。我是否需要以不同的方式完成我的多对多关系,并且给它自己的课程?任何其他方式,我忽略这将帮助我达到预期的效果?
如果您需要更多代码,我会发布。
答
2的方式来做到这一点:
-
SQL方式:
sessionFactory.getCurrentSession()createNativeQuery( “SELECT * FROM systems_game s其中s.game_id = 1”)...
-
休眠(JAVA)的方法:
游戏= session.createQuery(从游戏其中id = 1).uniqueResult() 列表系统= game.getSystems( )
只是尝试的伪代码!
答
HQL是关于对象,你不应该坚持你的数据库架构。
from SYSTEM as s join s.games as g where g.id=:id
这就是你需要的。