2010-09-17 99 views
1

今天我遇到了JPA/EJB3的新問題。我有2臺UserGroup 與測繪OneToMany(集團之一 - 用戶多)使用EJB3選擇衝突

當我使用SELECT語句中的EJB,例如:

@NamedQuery(name = "Iuser.findAll", query = "SELECT i FROM Iuser i") 

衝突發生,但不知道group我場選擇桌子在哪裏? (在Usergroup場是Groupgroupid [外鍵]和groupGroup [主鍵])

我怎樣才能解決這個問題?

我知道用戶user.group EJB3中的按鈕語句不能執行,請大家幫忙。

+0

對不起,我試圖理解這個問題......但沒有成功。你在說什麼衝突?你有錯誤信息嗎?你能提供嗎?你還可以提供映射的實體嗎? – 2010-09-17 14:33:54

+0

謝謝你回答我的問題是用戶表有一個名稱爲iGroup的字段它是表組的外鍵。他們的關係是多對一的 - 表用戶(許多) - 表組(一)它意味着一個組可以有許多用戶加入一個組!和當我使用Entitymanager.createNameQuery(「User.findAll」)時,我運行它錯誤發生錯誤代碼1064.如你寫的SQL腳本作爲選擇組從用戶它會發生錯誤代碼1064,但我用Select u.group從用戶ü,它工作得很好 – Kency 2010-09-17 16:22:01

+0

我想從人民的建議,如何解決它?,現在我有新的問題它是:javax.el.PropertyNotFoundException:/test.xhtml @ 24,173 value =「#{userController.users。用戶名}「:目標無法訪問,'null'返回null!請幫幫我 ! – Kency 2010-09-17 16:23:30

回答

2

我敢打賭,IGroup實體映射在表Group這是一個保留的關鍵字,並可能會導致問題,如果不逃脫。

如果您使用的是JPA 2.0提供商,你可以告訴JPA提供者用雙引號內封閉的名字,像這樣爲了躲避數據庫對象名稱:

@Entity 
@Table(name="\"GROUP\"") 
public class IGroup { 
    ... 
} 

如果你使用JPA 1.0,沒有標準化的方式,這取決於JPA提供商。使用Hibernate,你必須使用反引號:

@Entity 
@Table(name="`GROUP`") 
public class IGroup { 
    ... 
} 

或者更改表名稱的非保留關鍵字:

@Entity 
@Table(name="GROUPS") 
public class IGroup { 
    ... 
} 

是否有意義?

+0

是的!我會查一下 !!謝謝你回覆 – Kency 2010-09-18 06:50:22

+0

是啊!我解決了我的問題非常感謝你! – Kency 2010-09-18 07:17:20

+0

@Kency不客氣。 – 2010-09-18 07:56:10