2014-12-05 130 views
0

我是一個嘗試學習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,但我不知道如何映射它,因爲我沒有它的類。我是否需要以不同的方式完成我的多對多關係,並且給它自己的課程?任何其他方式,我忽略這將幫助我達到預期的效果?

如果您需要更多代碼,我會發布。

回答

1

2的方式來做到這一點:

  1. SQL方式:

    sessionFactory.getCurrentSession()createNativeQuery( 「SELECT * FROM systems_game s其中s.game_id = 1」)...

  2. 休眠(JAVA)的方法:

    遊戲= session.createQuery(從遊戲其中id = 1).uniqueResult() 列表系統= game.getSystems( )

只是嘗試的僞代碼!

0

HQL是關於對象,你不應該堅持你的數據庫架構。

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

這就是你需要的。