0

我将 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.projectManageris always null

不应该FetchType.EAGER导致用户被填充?我究竟做错了什么?

任何建议都非常感谢!

4

2 回答 2

0

看起来我找到了问题的答案,所以我会在这里发布。希望它可以帮助其他人。

在 IBM RAD 7.5 中,JPA 项目属性有一个名为“平台”的设置。默认值为“RAD JPA 平台”。当我将它更改为“通用”时,现在它可以工作了。

注意:我也按照 tomred 的建议更改@JoinColum为,不确定是否有任何作用。@Column

谢谢大家!

于 2012-05-22T13:05:12.087 回答
0

在这种情况下,您应该能够将其与 @Column 注释映射,因为连接列是例如引用位于关系另一侧的位置

项目->(有一个)用户然后项目有@Column,名称为=“projectmanagerid”

如果另一方面有用户引用的项目,那么您将拥有

用户 - >(有一个)项目然后项目有@JoinColumn 名称=“projectid”

目前您说用户表有一个名为 projectmanagerid 的引用列,但事实并非如此。

我希望这会有所帮助,汤姆雷德

于 2012-05-19T00:56:55.510 回答