2012-05-15 59 views
0

我在Java EE 5(IBM RAD 7.5和WebSphere 7)中使用JPA。我已經簡化了我的問題到以下示例...爲什麼不是簡單的JPA ManyToOne關係工作?

我有一個項目和一個用戶。這些表是這樣的:

PROJECT 
-- 
id 
name 
projectmanagerid // is a User 

USER 
-- 
id 
username 

我的課是這樣的:

@Entity 
@Table(name="PROJECT") 
class Project 
    @Id 
    @GeneratedValue(...) 
    Long id; 
    String name; 
    @ManyToOne(fetch=FetchType.EAGER) 
    @JoinColumn(name="projectmanagerid"); 
    User projectManager; 

@Entity 
@Table(name="USER") 
class User 
    @Id 
    @GeneratedValue(...) 
    Long id; 
    String username; 

要找回我的項目我這樣做:

Query query = em.createQuery("select distinct p from Project p"); 
query.getResult... 

一切正常,除了project.projectManager總是null

不應該FetchType.EAGER導致用戶填充?我究竟做錯了什麼?

任何建議,非常感謝!

羅布

+2

是因爲你希望你發出查詢之前(即不爲空),在數據庫中projectmanagerid場填充? – digitaljoel

+2

如果它爲空,則外鍵爲空。提取類型是否渴望不會改變任何內容。如果它是懶惰的,你將有一個非初始化的代理給用戶,但不是空的。 –

+0

是的,projectmanagerid字段填充在數據庫中。有任何想法嗎?某處或某處的XML文件中是否存在某個配置值?我無法弄清楚我錯過了什麼。 –

回答

0

它看起來像我找到了答案,我的問題,所以我會在這裏發佈。希望它可以幫助別人。

在IBM RAD 7.5中,JPA項目屬性具有一個名爲「Platform」的設置。默認值是「RAD JPA平臺」。當我改變它「通用」,現在它工作。

注:我也將@JoinColum更改爲@Column,正如tomred所暗示的那樣,我不確定這是否做了什麼,tho。

謝謝大家!

羅布

1

在這種情況下,你就應該能夠與@Column註釋作爲映射加入此列,例如,其中引用的關係

項目的另一端 - >(已經a)用戶則項目已@column與NAME =「projectmanagerid」

如果在其他用戶已經引用的項目,那麼你將有

用戶 - >(已a)項目然後項目已與名@JoinColumn =「projectid」

目前您聲明用戶表有一個名爲projectmanagerid的參考列,而不是這種情況。

我希望這有助於 TomRed

相關問題