我正在使用JPA和Java EE 5(IBM RAD 7.5和WebSphere 7)。我已将问题简化为以下示例...
我有一个项目和一个用户。表格如下所示:
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
不应该导致用户填充?我究竟做错了什么?
非常感谢任何建议!
罗布
答案 0 :(得分:1)
在这种情况下,您应该只能将其与@Column注释映射为连接列,例如,引用位于关系的另一侧
项目 - > (有)用户然后项目有@Column,名称=“projectmanagerid”
如果另一方有用户引用的项目,那么你会有
用户 - > (有)项目然后项目有@JoinColumn,名字=“projectid”
目前,您正在声明用户表有一个名为projectmanagerid的引用列,但事实并非如此。
我希望这有帮助, TomRed
答案 1 :(得分:0)
看起来我找到了问题的答案所以我会在这里发布。希望它可以帮助别人。
在IBM RAD 7.5中,JPA项目属性有一个名为“Platform”的设置。默认值为“RAD JPA Platform”。当我将其更改为“Generic”时,它现在可以正常工作。
注意:我也按照tomred的建议将@JoinColum
更改为@Column
,不确定这是否有效,等等。
全部谢谢!
罗布